V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Hua
V2EX  ›  程序员

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

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

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

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

    可惜没多少公司用git。
    wwqgtxx
        22
    wwqgtxx  
       2013-04-03 19:40:56 +08:00 via Android   ❤️ 1
    @Narcissu5 git-gui(msysgit自带的工具) ,Tortoisegit
    nine
        23
    nine  
       2013-04-03 23:10:44 +08:00   ❤️ 1
    我们也是从去年11月开始尝试git的(在此之前野生程序员单人开发,没有任何版本服务器使用经验)
    我们目前是这样使用的:

    1 根据开发内容划分branch。
    这样可以有多个branch同时进行,相互不干扰。不同branch通过hook自动push到不同的域名下以供测试。

    2 随时commit随时push。
    这样同一branch下的开发会很少处理文件冲突。

    3 合并时先把master合并到自己所在的branch,处理完冲突和bug后再合并到master。(如果合并时间超过1天,则递归此条,以防止别的commit或别的branch合并带来的bug)

    4 master和线上版本保持一致,发现bug后,相关开发人员切到master修复bug,push。
    测试没有问题后,push到线上。

    GUI工具 windows用 Tortoisegit
    mac用source tree
    目前木有linux用户~
    akira
        24
    akira  
       2013-04-03 23:34:40 +08:00
    如果你不用分支功能,用起来都差不多了。
    Hua
        25
    Hua  
    OP
       2013-04-04 20:43:25 +08:00
    多谢楼上各位,一直是我们没有用好分支...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2666 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:24 · PVG 08:24 · LAX 16:24 · JFK 19:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.