GIT版本管理使用技巧

来源:互联网 发布:陈家洛喜欢谁 知乎 编辑:程序博客网 时间:2024/05/16 16:33
原创:Daway.Huang

一、建立并导入GIT库(以添加EC Tools库为例)。
1,进入要的源码目录:
  cd ec_tools_code (确保该目录下没有不可提交的文件,如tags不提交则应该删除)
2,初始化该目录:
  git init
3,编辑“.gitignore”文件,加入忽略提交的文件:
  vim .gitignore
   tags
   *.o
4,将当前目录所有文件都加入到提交列表:
  git add .
5,提交:
  git commit  (信息内容一般初始导入时如此写:initial code of ec tools, 0.1)
6,建立远程库origin(确保远程仓库目录已建立好,若未建立请联系系统管理员):
  git remote add origin ssh://git@172.16.0.30/ec_tools.git
7,将本地文件上推到远程库的master分支:
  git  push origin master

二、将远程库上的分支下载到本地(以kernel的linux-2.6.27.1-lemote为例)。
1,先将远程库clone到本地:
  git clone git://dev.lemote.com/linux-loongson.git
2,与远程库同步一下:
  git pull  (该步骤可略,若本地很旧则需要同步一下)
3,新建远程分支到本地:
  git checkout -b linux-2.6.27.1-lemote origin/linux-2.6.27.1-lemote

三、直接从远程仓库中checkout出某个分支到本地仓库
1,确保在已有的本地仓库中操作。如果没有,则创建新的空白本地仓库:
  mkdir linux-2.6.27.1-lemote
      cd linux-2.6.27.1-lemote
      git init
2,取出远程仓库的某个分支(如linux-2.6.27.1-lemote)。
  格式:git fetch <url> <分支名>
  例:git fetch git://dev.lemote.com/linux_loongson.git linux-2.6.27.1-lemote
3,把取出的远程分支检出到本地。
  格式:git checkout -fb <新的本地分支名> FETCH_HEAD
  例:git checkout -fb linux-2.6.27.1-lemote FETCH_HEAD

四、通过打补丁email发送
1,制作补丁:
  git format-patch HEAD^ (或分支名,如master,或是commit SHA(如果是多个补丁))
  将生成形如下面的补丁文件:
  0001-Updata-xxx.patch
  也可将发送的email地址加入:
  git format-patch --cc="Huang Wei <huangw@lemote.com>" HEAD^
2,配置git send-email并发送补丁:
  git config --global sendemail.smtpserver (www.lemote.com)   //配置smtp服务器
  git config --global sendemail.smtpencryption abc                  //配置smtp服务器密码
  git config --global sendemail.smtpuser huangw                     //配置smtp用户名
3,发送(建议send-email的版本在1.6以上):
  git send-email 0001-Update-xxx.patch --to wuzj@lemote.com
      Who should the emails appear to be from?[huang wei <huangw@lemote.com>] (回车)
      Emails will be sent from: huang wei <huangw@lemote.com>
      Message-ID to be used as In-Reply-To for the first email?  (回车)
      (mbox) Adding cc: ... ...
      (mbox) Adding cc: ... ...
      password: (输入上面设置的密码“abc”)  (回车)
      OK. Log says:
      ... ...
  注意:该命令也可写成
  git send-email --from="Wu Zhangjin <wuzhangjin@gmail.com>" --to="Huang Wei <huangw@lemote.com>" 0001-Update-xxx.patch
4,将上面制作的补丁打到当前分支:
  git am 0001-Update-xxx.patch

五、制作补丁文件和打补丁
1,制作patch文件,将master修改的部分加到base分支中:
  git diff base..master > diff.patch
2,打补丁:
  进入base分支,执行以下命令:
  patch -Np1 -i diff.patch    //将补丁打到base分支,让base分支与master分支完全一致。

六、其他命令用法
1,git rm ec_sci.c              //将ec_sci.c从commit的Index中删除
2,git branch -D master    //删除master分支(本地)
3,git remote update        //清除远程分支的缓冲区
4,git checkout origin/master -b master    //将远程master分支创建到本地master分支
5,git commit --amend      //修改已提交的log内容。
  若修改log前已push到远程仓库,则可以强制push到远程仓库:
  git push origin +master:master    //加上“+”表示强制再次push
  问题:
  (1)如果在push时提示要输入密码,则为密钥不在当前的~/.ssh目录下,请拷贝密钥文件id_rsa到~/.ssh目录下。
  如:
    scp  huangw@172.16.0.30:.ssh/id_rsa ~/.ssh/
  (2)查看id_rsa文件用户,若为root则需要在~/.gitconfig文件中注册你的信息:
    vi ~/.gitconfig
    [user]
    email = huangw@lemote.com
    name = daway   #名字任意
  (3)如果你用git commit时的编辑log的工具不为vi,请在~/.gitconfig文件中添加:
    [core]
    editor = vi