[hellogcc] Re: [hellogcc] Re: git使用简介

  • From: Liu <proljc@xxxxxxxxx>
  • To: hellogcc@xxxxxxxxxxxxx
  • Date: Fri, 21 Oct 2011 09:21:08 +0800

2011/10/21 Yao Qi <qiyaoltc@xxxxxxxxx>:
> On Thu, Oct 20, 2011 at 10:12:24AM +0800, Liu wrote:
>> 给我们公司的人做了git培训,顺便写了一个。
>
> 很不错。git的文档网上到处都是,我们能不能结合自己的工作,介绍
> 如何使用git。
>
> 比如,在gcc开发,如何使用git-svn
>
> git svn rebase
> git svn dcommit 等等。
>

写的就是我们公司工作内容,我们自己的git服务器,自己公司内部的小项目。
我现在的工作就是写写文档,擦擦屁股。我已经很久不做gcc了,何况我也没有gcc的写权限,你说的git svn没用过,没法写。

>>
>> \section{git基本配置}
>> 运行下列命令来配置你的git客户端,就是填写个人基本信息和基本工具。
>> \begin{itemize}
>>   \item git config --global user.name "Your Name"
>>   \item git config --global user.email yournick@xxxxxxxxxxx
>>   \item git config --global core.editor YourFavoriteEditor
>
> 这里需要说一下,core.editor 一般就是vim,但是可以设置为一些特殊
> 脚本。这样在你 git commit 的时候,那个脚本运行,可以自动生成
> changelog entry等等。
>

不是说效果不是很理想么?

>>
>> \section{参与你没有写权限的开源项目}
>> 先说一下流程,把思路理清楚了,省得废话。
>> \begin{itemize}
>>   \item clone项目代码。
>>   \item 新建并切换到自己的分支。
>>   \item 修改,并提交到本地。
>>   \item 生成补丁。
>>   \item 把补丁发给maintainer。
>>   \item 你的补丁被接受之后,切换回主分支,删除自己的开发分支。
>> \end{itemize}
>>
>> 按照上面的流程,我们来看对应的命令。
>> \begin{itemize}
>>   \item git clone URL
>>   \item git co -b BRANCH\\
>>         相当于\\
>>         git br BRANCH 新建分支\\
>>         git co BRANCH 切换到分支BRANCH
>>   \item 修改代码,这个不用说了吧?\\
>>         git st 查看你对哪些文件做了修改\\
>>         git add MODIFIED\_FILE
>>         git ci -m "MSG" 把你的修改提交到本地
>>   \item git format patch 会自动生成补丁
>
> 一般在format patch之前,最好 git rebase -i master 一下
> 1. 可以把一些小commit cmobine在一起,
> 2. 修改commit log,把changlog加入 commit log中,这样,
> git format patch出来的patch,就带changelog了。
>

恩,这个很好,学习了。

>>   \item 
>> 把补丁作为附件mail给maintainer,Linux内核开发最蛋疼的是Linus要求小补丁作为邮件正文,擦,蛋疼,反正我也不玩儿内核,不管那么多。
>
> 这里有两个办法
> 1.  git send-mail 可以把patches发出去。我没有用过。
> 2.  手动inline patch到mail。这个需要mail
> client有一些修改。我以thunderbird为例子。 需要在thunderbird
> 中,关闭auto wrapping。 这个会自动把超过76个的字母的行给加上
> 换行。
>
> 在bash中 $ cat 0001-foo.patch | xclip
>
> 然后把光标放在邮件末尾,signature后边,
> 按下鼠标中键。patch就paste进来了。
>

这个确实很强大,好像都需要客户端,gmail咋就不考虑一下我们的需求,开发一个自动inline patch的feature呢。

>>   \item git co master 切换回主分支\\
>>         gir br -D BRANCH 删除自己的开发分支
>> \end{itemize}
>>
>> \section{参与你有写权限的项目中使用git}
>> 这不是git-svn,有了git之后,Who fucking care about CVS/SVN?
>>
>> 同样先说一下流程,把思路理清楚了,省得废话。
>> \begin{itemize}
>>   \item clone项目代码。
>>   \item 新建并切换到自己的分支。
>>   \item 修改,并提交到本地。
>>   \item 把你的分支推送到服务器。
>>   \item 通知maintainer合并你的分支。
>>   \item 如果maintainer没有删除你的分支,切换回主分支,并自己删除自己的分支。
>> \end{itemize}
>
> 这样的情况对于gcc/gdb,不多。能够把一个branch
> merge过来的人,都是少数,像Ian那样的。我们大多数工作的时候,是有自己
> 的branch,上边有若干local patches,每次review结束,可能只有一部分patch,
> 而不是整个branch的patch都被approve了。 这个时候需要git cherry-pick 从
> 你的branch挑选几个commit到master,然后push。
>

我只是针对我们公司的小项目,达不到那么大规模的开发。

>>
>> 下面的命令跟上一节相同的不再解释。
>> \begin{itemize}
>>   \item git clone username@URL\\
>>         因为你有写权限了,所以clone的时候,加上你的username
>>   \item git co -b BRANCH
>>   \item git ci -a -m "MSG"\\
>>         相当于\\
>>         git add ALL\_MODIFIED\_FILES\\
>>         git ci -m "MSG"\\
>>         如果有新建的文件或者目录,你还是需要\\
>>         git add NEW\_FILE/DIR
>>   \item git push origin BRANCH:BRANCH 把你的分支推送到服务器
>>   \item 通知maintainer合并你的分支,通讯基本靠吼,打电话,发邮件,都行吧。
>>   \item 如果maintainer没有删除你的分支\\
>>         git co master 切换回主分支\\
>>         git push origin :BRANCH 自己删除自己的远程分支\\
>>         git br -D BRANCH 自己删除自己的本地分支
>> \end{itemize}
>>
>> \section{管理你的git项目}
>> 如果你的项目里面有contributor、maintainer、commiter,你还做什么?只有两件事情了,合并分支,打release标签。
>> \begin{itemize}
>>   \item git merge BRANCH\\
>>         在master分支运行这个命令,就是合并了
>>   \item git tag TAG 1b2e1d63ff\\
>>         
>> 就是打标签了,虽然git的分支功能非常强大,但是我们每个release应该都是一个TAG,而不是一个branch啊,当然,也许有人希望继续维护某个release版本的branch的,可以建一个那样的分支,但是分支是不能取代TAG的。
>
> 这里是不是还要介绍一下,如果master修改了,你的branch怎么update。
> 一般是这样的:
>
> git checkout master // 切换到master branch
> git pull //
> git checkout your-branch
> git pull . master // update your-branch
>

恩,确实可以这么update。

> --
> Yao Qi <qiyaoltc AT gmail DOT com>
>
> Your depth of comprehension may tend to make you lax in worldly ways.
>
>

你这些都是在很多人参与的大规模的项目中的方法,对参与开源项目的人很有帮助。
你有时间的话,也许可以在tex文件里面增加这些内容,毕竟你是专业做开源的,比我们接触使用的多。

Other related posts: