可能是我们对git不理解,团队合作实际使用中感觉和svn没什么区别,每个人还是 add -> commit -> push到服务器等操作,谁能给讲解下git在使用中对团队实际有什么好处?主要就是分布式和存储方式的?谢谢

2013-04-02 10:09:48 +08:00
 Hua
18053 次点击
所在节点    程序员
25 条回复
zhiguoma
2013-04-02 10:13:59 +08:00
Git的特色之一是Branch,Git比其他的SCM工具在分支开发上有很大的优势。
因为您使用的操作是SCM必备的操作,所以从这个方面确实看不出区别。
nkliwenjian
2013-04-02 10:47:57 +08:00
git正常情况下是一个master分支,然后每人用自己的分支。add->commit->push这个行为是没有问题的,但是跟svn的真正区别在fetch和merge上面。例如说有5个人并行开发,其中一个人的提交对你的功能有影响,那么你只需要merge他的分支就好了,其他人的不merge也没问题。如果是在svn上的话,你一做svn up,就所有人的都merge了。

另外一个不同的地方就是代码优化之类的工作。有时候我们需要对某些代码进行重构,然后在本地一顿大改,这个时候有个紧急bug需要你去修,然后你会很尴尬的发现你的代码跑不起来了。用git的话你可以在你的本地开分支来做这些事情。优化完了以后自己本地merge完了再把最后结果提交。当然,用svn开分支也可以做到相同的事情,但是svn开分支是整个项目组影响的,要慎重。git的话只是在自己本地折腾而已。
ericFork
2013-04-02 14:08:43 +08:00
code review 也是一个好处,pull request 的机制比各种自造的 svn 轮子要方便优雅许多。另外,你们可以看一下 git flow 和 github flow,也许会有新的发现
takwai
2013-04-02 15:37:57 +08:00
guoqiao
2013-04-02 15:42:17 +08:00
1. 你可以将自己的工作分成很小的粒度依次commit, 全部改好后,再集中push. 这样很有条理,也不会影响别人。
2. 如果你在家里工作,你依然可以commit,到了公司后再push。避免了一股脑儿提交一大堆改动的情况。
3. 分支机制的开销很小,用熟了,真是团队合作的利器。
dun2
2013-04-02 22:04:38 +08:00
huangzxx
2013-04-02 22:10:21 +08:00
试一试 github。
hit9
2013-04-02 22:11:17 +08:00
你没有接触brach吗?git merge起来很棒的~
wuhx
2013-04-02 22:34:57 +08:00
首先git不是用来替代svn的,有可能svn更适合你们目前的需求.
相比svn,git的最大优势是它是一个分布式版本管理工具,每个成员可以有一套自己的本地代码,然后把需要部分同步到一个集中服务器中(想像一下用svn你如何版本控制一些不适合提交到中心服务器但又对你有点用的代码)

另外还有一种选择是:
公司统一用svn,然后有需要的同学自己在本地用git-svn玩.
nkliwenjian
2013-04-02 23:23:13 +08:00
公司集中团队开发跟git上面的协作式开发还是差距很大的,有在公司集中团队开发把git用得淋漓尽致的,不妨可以介绍介绍经验。

我在公司也不止一个项目试用过git了,实际操作中你会发现,单纯的4-5个人的一个集中开发的开发团队,几乎完全用不上git的各种所谓的技巧。这估计也是楼主问这个问题的原因。我经常性是一边使用svn,然后一边在svn遇到一些不好处理的问题的时候会去思考如果用git的话会不会好一些,这也就是我前面回复的内容的来源。

最有用的莫过于就是本地做代码优化重构或者实验的时候,开一个分支出去做,这样有什么bug要处理的话不至于让自己的开发环境一塌糊涂。集中push貌似很美,其实也就是那么回事。对于那些公司scm管理很严格的,要求一个changeset只做一件事情的话,本地commit,集中push就很有用,要不然其实也有点鸡肋。
dulao5
2013-04-03 09:36:55 +08:00
我也是git初学者,说个体会吧:

git 的版本历史是链表, svn 没这个。
在 svn 中,从 trunk merge到 branch 需要这么做:
trunk>
svn up ; svn log --limit xx
#拿到最新版本号B
svn info 拿到/trunk/svnpath
branch>
svn up; svn log --limit xx
#找到上次merge点的版本号A
svn merge -rA:B /trunk/svnpath
#这还只是merge到本地,还要提交
#提交还要再注释里面记录merge的起止号码
svn ci -m "merge [A:B] from trunk ....."

而再git里面一个命令就做完了。git内部管理了分支的版本信息。真正节省了程序员的时间。
ChenNi
2013-04-03 09:56:23 +08:00
"分支开发"是核心区别,不习惯于这一流程的话,使用Git意义不大
习惯以后会觉得比SVN舒服不是一点点
diwup
2013-04-03 11:01:50 +08:00
@ericFork "pull request 的机制", pull request 是 GitHub(以及其他git web app) 特有的功能,不是 git 的功能
lijia18
2013-04-03 11:14:54 +08:00
Git 的精华是branch,也是经验不足的人经常出错的部分。
ericFork
2013-04-03 11:48:11 +08:00
@diwup 嗯,我应该先把后面那句话提到前面来说
funcman
2013-04-03 12:18:41 +08:00
团队里的几个人也可以靠Git交换代码。
个人在本地可以靠Git实行更细的代码管理。
反正SVN有的Git都有,何必再用SVN。
Git有一定的学习难度,但是如果只是像SVN一样用,可以做一个用例教程发给每个组员。
Narcissu5
2013-04-03 14:09:23 +08:00
Git有图形化界面么?实在不想为这点儿事进控制台,SVN的图形化界面很适合懒人啊。
firsthym
2013-04-03 15:59:49 +08:00
你git用习惯了,就发现“分支开发”确实就是精髓。
skywinger
2013-04-03 16:33:12 +08:00
其实Git是加入了社交这个最大的元素,svn只是工具,没有社交。
nocoo
2013-04-03 16:38:07 +08:00
总有一天,Svn服务器会挂掉...
到时候你就会发现Git的好...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/64721

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX