4. Git使用记录

4.1. Git基本使用

详细手册: Git Book

4.1.1. 去跟踪以commit的文件

  1. git rm -f source/*.pyc
  2. git commit
  3. 在将不要跟踪的文件在 .gitignore 中设定好

4.1.2. merge的冲突解决

  1. 编辑冲突

  2. git commit

    Note

    冲突说明

    a123
    <<<<<<< HEAD
    b789
    =======
    b45678910
    >>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
    c
    

    其中:冲突标记<<<<<<< (7个<)与=======之间的内容是本地修改,=======与>>>>>>>之间的内容是合入的修改。

    可以使用图形界面工具解决冲突:

    git mergetool
    

4.1.3. 撤销一个合并

  1. 如果你觉得你合并后的状态是一团乱麻,想把当前的修改都放弃,你可以用下面的命令回到合并之前的状态:

    $ git reset --hard HEAD    # 撤销上一次提交
    $ git reset --hard HEAD^   # 撤销上上次提交
    
  2. 或者你已经把合并后的代码提交,但还是想把它们撒销:

    $ git reset --hard ORIG_HEAD
    
但是这条命令在某些情况会很危险,如果你把一个已经被另一个分支合并的分支给删了,那么 以后在合并相关的分支时会出错。
  1. 或者你只要回复一个文件,如”hello.c”:

    $ git checkout -- hello.c
    

4.1.4. rebase

  1. 在rebase的过程中,也许会出现冲突(conflict)。 在这种情况,Git会停止rebase并会让你去解决冲突;在解决完冲突后,使用一下命令完成rebase:

    git add
    git rebase --continue
    
  2. 在任何时候,你可以用–abort参数来终止rebase的行动,并且”mywork” 分支会回到rebase开始前的状态:

    $ git rebase --abort
    

4.1.5. 跟踪分支

  • $ git checkout –track origin/serverfix 或
  • $ git checkout -b sf origin/serverfix # 分支重命名为sf

4.2. github

4.2.1. 配置Git

  1. 在本地创建ssh key:

    $ ssh-keygen -t rsa -C "[email protected]"
    
  2. 回到github,进入Account Settings,左边选择SSH Keys,Add SSH Key,title随便填,粘贴key。为了验证是否成功,在终端输入:

  3. 设置username和email:

    $ git config --global user.name "your name"
    $ git config --global user.email "[email protected]"
    

    上面命令中带了 --global 参数,这就意味是在进行全局配置,它会影响本机上的每个一个Git项目。如果没有 --global 表示本项目的配置。

  4. 进入要上传的仓库,右键git bash,添加远程地址:

    $ git remote add origin [email protected]:yourName/yourRepo.git
    

4.3. git-svn

为了避免麻烦,试着遵守如下守则:

  • 保持一个不包含由 git merge 生成的 commit 的线性提交历史。将在主线分支外进行的开发通通衍合回主线;避免直接合并。
  • 不要单独建立和使用一个 Git 服务来搞合作。可以为了加速新开发者的克隆进程建立一个,但是不要向它提供任何不包含 git-svn-id 条目的内容。甚至可以添加一个 pre-receive 挂钩来在每一个提交信息中查找git-svn-id 并拒绝提交那些不包含它的 commit。

4.3.1. 工作流

  1. 从svn clone出项目:

    $ git svn clone -s https://svn.xxx.com/svn/xxx  # 加上-s参数以标记识别svn标准的目录分支结构
    $ git svn show-ignore >> .git/info/exclude      # 通过show-ignore设置git库的exclude属性
    
  2. 建立本地工作分支,开始工作:

    $ git checkout -b work
    $ git commit -a
    
  3. 提交回svn:

    $ git checkout master
    $ git merge work (最好用git rebase work, 因为svn只有线性的历史)
    $ git svn rebase
    $ git svn dcommit
    
  4. 从svn更新:

    $ git checkout master
    $ git svn rebase