Git Standard Development Model
Git标准开发模型
之前用了很长时间的git,最近才了解到git的正确用法。
正如Nicholas said:Using git is very easy but using git correctly is not easy!
git文件最好是以二进制的存在,这样比较容易对文件进行追踪。最好不要将binary文件add进来!doc?exe?No!
http://longair.net/blog/2009/04/16/git-fetch-and-merge/
http://www.oschina.net/translate/git-fetch-and-merge?cmp
我们拿这篇文章说,很多时候,我们用git,把他当成svn了。因为我们知道svn只能同时有一位开发者在操作文件,其他文件是锁定的。
我们常常git pull 这个就和svn checkout差不多。但是我们要谨慎使用git pull (git pull = git fetch + get merge)
但是git是并行开发的。
在linux kernel中git广泛使用,比如git的master分支只有少数人有权限可以写,其他人只能进行读。控制master的分支读写的人也就是linus这种人了吧。。。。 :-D
对于我们,我们只能clone他的master分支和有dev branch。
对于linux kernel这么大的项目,git才能大显身手。
看下面的图:
我们看到CM machine是主分支,上面的/shared/test.git就是类比于master,而linus控制着Local work test。他们之间使用git clone操作,如图所示。
如果我们要对linux kernel的master进行修改,我们必须要clone master分支,然后我们可以在本地通过–bare建一个git server。
我们日常的修改就是在本地的local work test 和本地服务器之间进行。
如果我们开发好了一个东西,我们要首先和管理master的管理员联系。说我们要合并分支。
然后CM machine管理员通过git fetch去fetch 开发者在本地的git 服务器。 这时管理员可以在本地看到FETCH_HEAD和log ,这时我们通过git merge合并分支。然后由他们把你的修改push到master中。
如果他对fetch的内容不同意,他就会弃置不管,不会进行merge!
我们可以先使用git log -p HEAD..FETCH查看更改。然后使用git merge MD5 合并每次提交。
完成对源代码的修改。
要记住,在push到远程仓库前,我们有后悔药吃,我们可以用git revert 和git reset。第一个比第二个安全!
第一个会在git log 中留下记录,第二个就会直接回滚到指定的commit!
git reset HEAD^ 回到前一个提交,不会在log中留下记录。
所以要谨慎使用!
附自己画的图: