经过一宿的研究,我觉得我基本上知道该怎么玩Git了

指针为空 发布于 2013年11月07日
无人欣赏。

昨天的帖子Git出问题了,搞不懂Git怎么玩,结果出了一堆问题,经过一晚上的研究,我想我应该是明白了该怎么玩Git了。

说说我的理解,大家给指点指点

  1. Git与SVN的主要区别是,丫是分布式的,不是集中式的,在无网状态下依然可用。
  2. Git的存储方式不是以文件作为最小单位的,而是以行(看着貌似很nb的样子)
  3. Git是Linus对世界的第二大贡献,之所以发明Git是因为这货要对linux核心代码的绝对控制,坚决不放心代码放在传统版本库里,必须放在他自己的电脑里他才放心。

当然,以上这些都不是重点,重点在下面

团队每个人克隆了代码之后,就相当于在本地创建了一个代码库,而所谓的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版本。

就这么多吧,大家给指点指点看看有什么理解的不对吗?希望不吝赐教

共14条回复
vikiliu0310 回复于 2013年11月07日

学习一下~~

zhangmeteor 回复于 2013年11月07日

git居然是linus大神发明的。。学习了

tinyfool 回复于 2013年11月07日

@指针为空 想学好,有两个细节一定要学清楚

一个是rebase,有点类似于merge,但是不同

第二个是pull request,实际上Linus发明git的很大原因就是pull request这种机制,他需要合并太多来自全球的提交,有了rebase和pull request技术,他可以确保,提交者在提交前已经把各种冲突解决了,他自己只需要测试代码是否符合规范和其作用,而不需要管太多这么解决不同版本的冲突

zuzionly 回复于 2013年11月07日

公司最近从一个trunk branch和一个update branch的svn式git改成了真正的git式git--多个feature branch,多个bug fix branch和release candidate branch,production branch,我已经花了一个星期在研究git branch的各种命令和参数了,到现在还是晕的

指针为空 回复于 2013年11月07日

3楼 @tinyfool ok,收了

Igotit 回复于 2013年11月07日

推荐蒋鑫的那本《Git权威指南》,基本上可以把Git主要的细节都搞明白,平时也方便查阅。

coredump 回复于 2013年11月07日

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

coredump 回复于 2013年11月07日

我决定在我自己的库里创建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

你那篇帖子我也给回复了,希望对你有帮助

ichenxiaodao 回复于 2013年11月07日

如果是开放主机游戏或是项目很大,团队很大。

Git应该不合适。

我们用Perforce.

指针为空 回复于 2013年11月07日

8楼 @coredump 非常感谢

minddriven 回复于 2013年11月08日

用 git flow

minddriven 回复于 2013年11月08日

9楼 @ichenxiaodao 看来 Linux 是一个小项目了。

coredump 回复于 2013年11月12日

13楼 @minddriven git flow设计得不错,有点类似Google的那个repo. 不过如果git几个最基本的命令没有先融汇贯通的话,不建议直接用这些wrapper命令,更容易迷糊。

本帖有14个回复,因为您没有注册或者登录本站,所以,只能看到本帖的10条回复。如果想看到全部回复,请注册或者登录本站。

登录 或者 注册
相关帖子

[顶 楼]
|
|
[底 楼]
|
|
[首 页]