您的位置:首页 > 其它

版本管理工具Git记录

2017-11-07 10:43 246 查看
一:Git简介
        Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,采用了分布式版本库的方式,不必服务器端软件支持。

二:基本概念:

版本库(Repository)是版本控制系统用来存放所有历史数据的地方,主要存放各个文件的当前状态,历史修改时间,谁做的修改,以及修改的原因。举个简单的例子,就好比银行的保险箱,每次往里存钱,都会记录谁,什么时间,存放多少钱,存入的原因等。对应的版本库(Repository)主要存放代码(文档,数据,图标等),并且每一次更新都要记录谁,什么时间,提交了什么更新,以及更新的原因是什么。
git就是管理我们这个版本库的管家,相当于银行保险箱的管理人员。以前的版本控制入CVS,SVN等都是集中控制管理的,也就是有一个中央服务器,大家都把代码提交到中心节点(入下图),而git是分布式的版本控制工具,也就是说没有中央服务器,每个节点的地位平等,有点P2P的味道,众生平等,谁也别瞧不起谁 。

三:Git
与 SVN 区别

         GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应GIT提供的一些概念和特征。

Git 与 SVN 区别点:
1、GIT是分布式的,SVN不是:这是GIT和其它非分布式的版本控制系统,例如SVN,CVS等,最核心的区别。
2、GIT把内容按元数据方式存储,而SVN是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似.svn,.cvs等的文件夹里。
3、GIT分支和SVN的分支不同:分支在SVN中一点不特别,就是版本库中的另外的一个目录。
4、GIT没有一个全局的版本号,而SVN有:目前为止这是跟SVN相比GIT缺少的最大的一个特征。
5、GIT的内容完整性要优于SVN:GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。

四:安装环境

  windows 下安装git 官网下载太慢,这里推荐自己百度云下载  http://pan.baidu.com/s/1slqN1dr 。安装完成后,桌面上会有Github和Github
Shell的快捷方式出现。
  

五:Git
快速入门

使用Git前,需要先建立一个仓库(repository)。您可以使用一个已经存在的目录作为Git仓库或创建一个空目录。
1:创建版本库:  mkdir test_git        //新建目录test_git
                     cd test_git            //进入目录
                     git init                  //初始化git,现在git会管理这个目录中的所有内容了

2:增加文件:      touch
helloworld.txt     //创建文件,在windows下直接到目录新建文件即可
                   

git add helloworld.txt    //告诉git我要添加一个文件,但是git并没有把你所添加的文件放入版本库中,而是对内容进行.//相当于添加内容的身份证号,将该身份证号添加到版本库index,即告诉git我有一个文件编号XXX的内容将要提交,//但是并没有真正提交到版本库(如下图),要想将文件真正放入版本库需要commit
3:提交 git commit -m "add helloworld.txt"         //-m参数是提交留言,说明为什么要提交的更新做了什么事情,方便别人查看。

  对图的说明:working directory是当前的工作目录,而stage是暂存区也称索引区存放工作目录中那些你打算提交到版本库的变更,git
add只是将文件的索引提交的版本库,而真正的内容并没有进入版本库,History就是版本库,需要注意的是这是本地的版本库,存在于本地的电脑中,相当于你电脑上一个你的私人钱财管理员。

4、两个常用操作经常一块使用
git add some-file
git commit -m "some changes to some-file"

git status:查看当前代码状态: 会显示changes
to be commited       表示将要提交但是尚未提交的修改(已经add但是尚未commit),也就是在stage区域已经有了,但是还没有commit的内容
                         changed but not updated       表示已经修改但是还没有添加到暂存区的内容(尚未add,当然尚未commit)
5、查看文件改动 git diff 
    git diff      
       比较working direcotry 和stage的差别
    git diff -cached   比较stage和history的差别
    git diff Head      直接比较working directory 和history的区别
6、文件重命名:git mv
    git mv helloworld.txt helloworld2.txt   
  //将helloworld.txt重命名helloworld2.txt

六:理解和使用分支
      git可以使用多条分支,这样就可以再不影响当前进度的情况下,用创建新的分支的方法来进行接下来的开发,何时使用分支是一门艺术,一般来说:
    1. 试验性修改(常用):测试新的算法或者为某个特别的模式重构部分代码。
    2. 增加新功能(常用):为每个新功能的开发创建新的分支,完成该功能开发后,在将其合并到主分支。
    3. Bug修改:修复代码中的bug,可以创建新分支来对该bug进行修改,然后将修改合并到主分支上。
    
    创建新分支:git branch test            //创建名为test的分支
   

切换分支:  git checkout test          //切换到test分支工作, 与上面的命令经常一起使用
    查看分支:git branch                      //查看前版本库(本地)的所有分
   

合并分支:git checkout master        //切换到“要合并到”的分支,常见的就是test分支合并到master分支
    所以先切换到master分支
              git merge test                   //合并test分支到master分支

注意: 在合并分支的时候有时候会出现冲突(conflict)的情况。创建的情况是master分支和test分支对同一文件的同一处代码的内容不一样(例如:master分支在hello.cpp中第三行写入的是"hello",
而test分支在hello.cpp的第三行中写入的是“world”),这样使得git不知道如何是好,这时候就需要你手工修改代码了,我难道要记住master和test在同一位置的内容?当然不用了,git会在git merge的反馈信息中说明,代码在何部分存在冲突。

删除分支: git branch -d test          //删除test分支
分支重命名:git branch -m test test2      //将test分支重命名为test2,这个命令不常用

七:理解和使用分支
    查询所有的commit历史:git log
    查询指定范围的commit历史: git log --since = "5 hours"               
//查看最近5小时的commit历史记录
  git log --before = "5 hours" -2             
           
          
           //查看5小时之前最后2次的提交commit记录
    git log 18f822e..0bb3dfb                    
           
           
          //查看从18f822e(不包括18f822e)到0bb3dfb之间的提交记录
    git log 18f822e..HEAD                           
           
           
      //HEAD表示当前所在分支的最新版本,即HEAD指向当前所在分支的最后一次commit
    git log HEAD^^^                             
 
              
           
     //^表示父节点,HEAD^就表示HEAD的父节点,以此类推
    git log HEAD~3                              

              
           
         //~N 表示回溯N个节点,所以与上一个表述等价
    
   查看版本之间的差异: git
diff                                                    //查看working
dir和stage(index)之间差异
    git diff  --cached                             
           
 
              
     //查看stage(index)和History(当前分支版本库)之间的差异
    git diff  HEAD                               

              
           
         //查看working
dir 和 History之间的差异
    问责文件内容:git blame hello.cpp                         
 //查看所用向hello.cpp提交内容的人,方便问责到人,谁,什么时候,提交代号,提交内容,留言等都会显示
    增补提交:     git commic  -C HEAD -a --amend    
    //用head上次提交的留言(-C表示comments),将这次的提交追加到上一次提交上,不会创建新的提交代号.


八:理解和使用分支

还有一些不是很常用的操作简单的列在下面,如果用到这些命令,可以参看git doc或者本文参考文献中所列的内容,不一一赘述。

翻转提交:       git revert

复位:            git reset

分支变基:      git rebase

标签:            git tag

git子模块:     git submodule

导出版本库:   git archive
二分查找:      git bisect

九:理解和使用分支
github就是提交远程版本库服务的网站,所以我们这里的远程版本库为方便起见用github代替,上面我们得操作都是和本地的git交互,相当于是和本地的git小助手交互,如何将这些在本地的代码和github上的版本库连接起来:将本地的代码推送到github上,将github上的代码检出(checkout)到本地?

git支持三种协议:

SSH协议格式: usrname@github.com/registername/helloworld.git     
    //常用于将本地版本库推送到github上的版本库

git协议格式:   git://github.com/registername/helloworld.git               
 //常用于从github版本库拖入本地版本库

HTTP/HTTPS协议格式: http://github.com/registername/helloworld.git

克隆github上的Spoon-Knife版本库到本地:   git clone git://github.com/octocat/Spoon-Knife.git

版本库同步:                                          git fetch              //取来(fetch)远程版本库到本地,但是并不与本地分支合并                           

                                                          git pull                //拖入(pull)远程版本库,与本地分支合并,相当于 git
fetch + git merge 

推送本地代码到远程版本库:                       git remote add origin https://github.com/registername/reponame.git  
//为远程版本库reponame取别名origin
                                                          git push origin master                                  // 将本地master分支推入github上的origin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git