昨天的帖子Git出问题了,搞不懂Git怎么玩,结果出了一堆问题,经过一晚上的研究,我想我应该是明白了该怎么玩Git了。
说说我的理解,大家给指点指点
当然,以上这些都不是重点,重点在下面
团队每个人克隆了代码之后,就相当于在本地创建了一个代码库,而所谓的Git服务器作用无非就是作为一个将代码共享给别人的地方,如果你更改设置,任何地方都是你的Git服务器,可以把它理解为就是一个共享目录罢了。
每个人手里有一个版本库,一个工作目录,你的代码实际上存在工作目录中,而代码管理的版本库则在本地的版本库里。
当你commit的时候,无法是将修改的代码注释之后放到本地的版本库里罢了,如果需要给别人的时候,才需要push,push的意思是把代码放到共享目录里去。
大家都往一个共享目录里放代码,所以在放代码的时候需要与现有的代码做整合,整合分两步,先下载,然后整合。git下一个命令可以搞定pull。所以在push之前要pull下来,把自己的代码整合好(本地库)然后在push上去(共享出来),这点完全有别于SVN,SVN你只需要上传就好了,因为你操作的文件是被你锁定的。
pull代码下来的时候会发现有一些代码无法整合,原因是有多个人都修改了这个文件,这时候就需要手动对照处理来进行整合了。当然,理论上说如果几个人改的是一个文件中不同的代码位置的话,Git一样可以自动整合到一起。(据说是)
Git还有一个强大的地方就是分支,分支就可以简单的理解成当你要修改一个地方但又不想影响原来的代码的时候,你会复制一个拷贝出来。这就是分支了。
以上这些其实也不是重点,重点是这里
因为Git太灵活了,所以团队了每个人可以自己去设计自己的库,现在公司的团队每个人手里就是一个master,改完push,没有分支。
我决定在我自己的库里创建2个分支,一个Dev分支,进行开发,一个bug分支进行bug调整,两边在完成开发和修改之后与master整合,整合后在push到共享,这样一来,我dev分支下的代码始终是我自己做开发的。
同时当上线的时候,还可以做一个release分支,基本就是用来保存release版本。
就这么多吧,大家给指点指点看看有什么理解的不对吗?希望不吝赐教
公司最近从一个trunk branch和一个update branch的svn式git改成了真正的git式git--多个feature branch,多个bug fix branch和release candidate branch,production branch,我已经花了一个星期在研究git branch的各种命令和参数了,到现在还是晕的
Git是Linus对世界的第二大贡献,之所以发明Git是因为这货要对linux核心代码的绝对控制,坚决不放心代码放在传统版本库里,必须放在他自己的电脑里他才放心。
不是这样的,Linus写Git是被逼无奈,Linux kernel长期以来一直使用免费版的Bitkeeper管理代码仓库,可是某些有Open source洁癖的Kernel开发人员对此唠唠叨叨颇有微词,然后还把人家Bitkeeper的协议给reverse engineering了, 最后把人家Bitkeeper惹毛了,然后Linus就没Bitkeeper可用了,在痛骂一顿这帮二逼的Kernel开发者后,无奈提笔(拿起键盘)写下了这个(git - the stupid content tracker) ,显然写完git后,丫气还没消。 (http://en.wikipedia.org/wiki/Git_(software)#History)
BitKeeper至今仍然在很多大公司流行:http://www.bitkeeper.com/Customers.html
我决定在我自己的库里创建2个分支,一个Dev分支,进行开发,一个bug分支进行bug调整,两边在完成开发和修改之后与master整合,整合后在push到共享,这样一来,我dev分支下的代码始终是我自己做开发的。
这也不是最佳实践, 应该每个bug一个分支, 而且不应该和你的本地local master merge (冲突的起源), you should keep local master read only and always fast forwardable.
另外优先使用fetch + cherry-pick的组合而不是pull + merge或者pull --rebase
你那篇帖子我也给回复了,希望对你有帮助
8楼 @coredump 试试 git flow。 http://danielkummer.github.io/git-flow-cheatsheet/
13楼 @minddriven git flow设计得不错,有点类似Google的那个repo. 不过如果git几个最基本的命令没有先融汇贯通的话,不建议直接用这些wrapper命令,更容易迷糊。