V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
zioc
V2EX  ›  git

从 git 迁到 svn,求教大家单位上 svn 都是怎么用的?

  •  
  •   zioc · 2015-09-08 18:02:36 +08:00 · 8563 次点击
    这是一个创建于 3396 天前的主题,其中的信息可能已经有所发展或是发生改变。

    trunk 为主开发目录, branches 为分支开发目录, tags 为 tag 存档目录(不允许修改)。但是具体这几个目录应该如何使用, svn 并没有明确的规范,更多的还是用户自己的习惯。

    对于这几个开发目录,一般的使用方法有两种。

    1.第一种方法,使用 trunk 作为主要的开发目录
    一般的,我们的所有的开发都是基于 trunk 进行开发,当一个版本 /release 开发告一段落(开发、测试、文档、制作安装程序、打包等)结束后,代码处于冻结状态(人为规定,可以通过 hook 来进行管理)。此时应该基于当前冻结的代码库,打 tag 。当下一个版本 /阶段的开发任务开始,继续在 trunk 进行开发。
    此时,如果发现了上一个已发行版本( Released Version )有一些 bug ,或者一些很急迫的功能要求,而正在开发的版本( Developing Version )无法满足时间要求,这时候就需要在上一个版本上进行修改了。应该基于发行版对应的 tag ,做相应的分支( branch )进行开发。

    2.第二种方法,在每一个 release 的 branch 中进行各自的开发, trunk 只做发布使用。
    这种开发模式当中, trunk 是不承担具体开发任务的,一个版本 /阶段的开发任务在开始的时候,根据已经 release 的版本做新的开发分支,并且基于这个分支进行开发。

    第一种好还是第二种呢?

    需求就是:
    1.0 发布了,做 2.0 时,发现 1.0 有很急的 bug 要解决(需要发布 1.0.1 版),如果这些 bug 在 1.0 解决了,怎么更新到 2.0 呢?

    90 条回复    2015-09-10 16:30:33 +08:00
    leonlh
        1
    leonlh  
       2015-09-08 18:05:00 +08:00
    竟然有从 git 切到 svn...
    maddot
        2
    maddot  
       2015-09-08 18:06:00 +08:00
    歪一下,不是公务员才称自己上班的地方叫单位的吗
    cangshu
        3
    cangshu  
       2015-09-08 18:08:35 +08:00
    SVN 用的好反人类啊。。。。
    ifconfig
        4
    ifconfig  
       2015-09-08 18:17:28 +08:00
    不理解用 svn , git 最好用的是分支,每次合并分支就好比在床上对着韩红撸了一回,爽!!
    forcecharlie
        5
    forcecharlie  
       2015-09-08 18:18:22 +08:00
    svn 的逻辑还是第一种 好, trunk 做主开发,定期新建 branch 然后 修复 bug ,发布 在 tag, 修复也在 branch ,
    包括 gcc subversion llvm reactos 这些项目使用 svn 托管都是这么做的。
    leefly
        6
    leefly  
       2015-09-08 18:20:26 +08:00
    竟然有从 git 切到 svn... [doge]
    janon
        7
    janon  
       2015-09-08 18:22:48 +08:00
    竟然有从 git 切到 svn...
    janon
        8
    janon  
       2015-09-08 18:23:53 +08:00
    只听过从 svn 切到 git 的。。。
    lyragosa
        9
    lyragosa  
       2015-09-08 18:23:57 +08:00
    别人都是 svn 切到 git ,这还有 git 切 svn 的……
    66beta
        10
    66beta  
       2015-09-08 18:27:22 +08:00
    哼哼,楼主公司不是唯一
    怎么用?当网盘用最刁!
    learnshare
        11
    learnshare  
       2015-09-08 18:28:17 +08:00
    居然有从 Git 迁移到 SVN ...
    zioc
        12
    zioc  
    OP
       2015-09-08 18:35:00 +08:00
    @leonlh
    @leefly
    @janon
    @learnshare
    其他的代码都在 svn , iOS 也要迁过去...
    zioc
        13
    zioc  
    OP
       2015-09-08 18:36:55 +08:00
    @forcecharlie 我的意思是 旧版修复的内容要能更新到新版,求用法。

    即 1.0.0->1.0.1 更新的内容要能更新到 2.0 的分支
    zioc
        14
    zioc  
    OP
       2015-09-08 18:38:27 +08:00
    @maddot ..
    itbdw
        15
    itbdw  
       2015-09-08 18:41:03 +08:00
    竟然从 GIT 迁移到 SVN 。。。。。
    PINK0FLOYD
        16
    PINK0FLOYD  
       2015-09-08 20:45:12 +08:00
    把热更新的补丁开一个分支,然后分布合并到 1.0 和 2.0 中。
    kevinzhwl
        17
    kevinzhwl  
       2015-09-08 20:50:45 +08:00
    给个方案
    继续用 git + 在需要的节点时把代码推到 svn 。
    Menng
        18
    Menng  
       2015-09-08 20:52:30 +08:00
    居然会从 Git 迁移到 SVN
    wizardoz
        19
    wizardoz  
       2015-09-08 20:53:23 +08:00
    竟然从 GIT 迁移到 SVN
    perpyy
        20
    perpyy  
       2015-09-08 20:57:31 +08:00
    居然会从 Git 迁移到 SVN, 我报警了!
    Phariel
        21
    Phariel  
       2015-09-08 21:05:55 +08:00 via Android
    竟然从 git 迁到 svn ,我真是日了 doge 了。。。
    msg7086
        22
    msg7086  
       2015-09-08 21:14:42 +08:00
    #13 @zioc 你以为别人是为了什么才从 svn 换到 git 的?
    zioc
        23
    zioc  
    OP
       2015-09-08 21:20:11 +08:00
    @msg7086 都说了,没办法 公司的产品是全端,甚至包括 asha 、展讯、黑莓、 mtk 。。。都在 svn 。


    @Phariel
    @perpyy
    @wizardoz
    @Menng
    ...
    zioc
        24
    zioc  
    OP
       2015-09-08 21:20:27 +08:00
    @PINK0FLOYD 这个想过,麻烦
    msg7086
        25
    msg7086  
       2015-09-08 21:21:44 +08:00
    @zioc 人们抛弃 SVN 就是因为分支反人类啊。
    yhxx
        26
    yhxx  
       2015-09-08 21:33:19 +08:00
    好神奇。。。竟然从 git 迁移到 SVN 。。。。
    LINAICAI
        27
    LINAICAI  
       2015-09-08 21:37:00 +08:00
    从 git 迁移到 SVN
    + 10086
    xuxanwan
        28
    xuxanwan  
       2015-09-08 21:40:32 +08:00
    ....git --> svn 你这是倒着走啊
    lightening
        29
    lightening  
       2015-09-08 21:45:03 +08:00
    不能用 git-svn 吗?
    ChanneW
        30
    ChanneW  
       2015-09-08 21:45:32 +08:00
    自己试过方案 1 ,感觉 trunk 不好。
    当前的公司方案 2 , tag 作为发布,和 git 用的流程差不多。
    ostholz
        31
    ostholz  
       2015-09-08 22:06:15 +08:00
    很多大公司的代码管理是比较拖后的。 这个是也没有办法的事儿。
    JobsLong
        32
    JobsLong  
       2015-09-08 23:11:23 +08:00
    有个工具好像叫做: git-svn 可以互相转换
    billlee
        33
    billlee  
       2015-09-08 23:20:09 +08:00
    公司 SVN 还能怎么用,当 FTP 用啊
    jhdxr
        34
    jhdxr  
       2015-09-08 23:20:56 +08:00
    这么多无意义的吐槽也真是醉了。。。虽然。。。我也想吐槽。。。

    之前在阿里用的接近模式 2 ,每次任务基于 trunk 新开一个分支,上线的时候合并回 trunk 。
    至于 LZ 你所提到的情况, svn 也是有分支合并功能的啊!!!
    ibcker
        35
    ibcker  
       2015-09-08 23:22:08 +08:00
    @ifconfig 你口味好重···
    FrankFang128
        36
    FrankFang128  
       2015-09-09 01:15:43 +08:00
    svn 很难用,你只用 update 和 commit 两个功能就好啦 ~~~
    Tedko
        37
    Tedko  
       2015-09-09 01:24:49 +08:00
    你用 git svn 之类的工具好了 n 。开发时候还是用 git
    incompatible
        38
    incompatible  
       2015-09-09 01:42:02 +08:00   ❤️ 3
    这帖子噪音真大。


    我之前所在团队的做法:

    - 严禁直接在 trunk 上开发
    - 每个 feature 的开发启动后,从 trunk copy 至新的 branch ,在 branch 上开发、提测、测试
    - 基于 branch 机制,可以同时有多个 feature 并行开发
    - 测试通过后把 branch merge 至 trunk (此时的 trunk 可能已经被合并了其它 branch 的代码,跟当初 copy 至此 branch 时已经不一样了,所以需要回归测试)。此时锁定 trunk ,不允许任何 merge 或 copy from 。在 trunk 做回归测试
    - 回归测试通过后,把 trunk copy 至 tag ,使用 tag 打包、部署上线。解锁 trunk
    - 当线上代码发现 bug 时,依然是通过开新的 branch 来解决 bug 具体流程同上
    - 如果某个 branch 的开发时间非常非常长,在它开发结束时, trunk 上可能已经被 merge 了好多 branch 。这时为了降低把 branch merge 回 trunk 时解决冲突需要的时间以及回归测试的成本,会采用先把 trunk merge 至 branch 、先在 branch 上回归测试的方式
    Wangxf
        39
    Wangxf  
       2015-09-09 01:44:33 +08:00 via iPhone
    svn 几乎 0 学习成本,下载个小乌龟就行了
    forcecharlie
        40
    forcecharlie  
       2015-09-09 03:54:59 +08:00
    @zioc 查看 svn merge 命令,也可以获得 修改的 diff 然后 trunk 合并。
    582033
        41
    582033  
       2015-09-09 07:04:08 +08:00 via Android
    用 git-svn 呗,我也是从 git 换到 svn 。
    adexbn
        42
    adexbn  
       2015-09-09 08:03:36 +08:00 via iPhone
    @582033 +1 。然而实际上最后都是 svn->git
    hpeng
        43
    hpeng  
       2015-09-09 08:04:23 +08:00 via Android
    @incompatible 真特么规范!我现在公司全部在 trunk 开发…内网构建一周挂个 2 到 3 次……每次挂了的心情简直就是 doge
    newghost
        44
    newghost  
       2015-09-09 08:35:10 +08:00
    没觉得 SVN 有什么不好
    imlinhanchao
        45
    imlinhanchao  
       2015-09-09 08:48:39 +08:00   ❤️ 4
    V2 社区有一种同,当有人不同时,若他提出疑问,疑问将很难被解答,若他提出观点时,观点会被打压,若他分享时,分享的事物将被贬低。但这又有什么关系呢,任何人类社区,无论线上还是线下,都是不可避免的会朝这样的结果发展。因为,社区本来就是因为观点相似才聚在一起的呀~
    xiaoyao9933
        46
    xiaoyao9933  
       2015-09-09 09:07:05 +08:00
    svn 确实有点反人类。。
    Menng
        47
    Menng  
       2015-09-09 09:23:47 +08:00
    第二种,发布时用 Git
    yuankui
        48
    yuankui  
       2015-09-09 09:59:21 +08:00
    见过 svn 迁 git 的,还没见过 git 迁 svn 的
    Navee
        49
    Navee  
       2015-09-09 10:05:21 +08:00
    一大波喷子正在来袭
    kobe1941
        50
    kobe1941  
       2015-09-09 10:07:15 +08:00
    从 git 到 svn ,这种公司楼主你辞职算了
    bbiao
        51
    bbiao  
       2015-09-09 10:20:05 +08:00
    先不吐糟楼主从 Git 迁移到 SVN 这种逆天的行为了,对于你的需求:

    1.0 发布了,做 2.0 时,发现 1.0 有很急的 bug 要解决(需要发布 1.0.1 版),如果这些 bug 在 1.0 解决了,怎么更新到 2.0 呢?

    其实你提到的两种使用 SVN 的开发方式都能满足,无非就是在发布 1.0.1 版的时候,都必须在 Branch 上开发。
    zioc
        52
    zioc  
    OP
       2015-09-09 10:26:36 +08:00
    @incompatible 谢谢。很受用!
    @jhdxr 谢谢分享!
    @582033 @Tedko git-svn 可靠吗,是不是可以这样:本地 git ,远程 1 git ,远程 2 svn 。维持原有的 git remote 做小组内部更新(较频繁的提交),用 git-svn 每天一次提交 git 的代码到 svn
    holmesabc
        53
    holmesabc  
       2015-09-09 10:57:43 +08:00
    公司 svn 就只做一个仓库来用. 一个在开发的, 其它都是 tag.
    反正主线 分支 tag 都是完全的文件 copy

    跟 git 思想不一样, 还是不要完全搬 git 的规则的好.

    就用 1 方案好了. 感觉 svn 目录切来切去很麻烦的.
    est
        54
    est  
       2015-09-09 11:00:31 +08:00
    切 svn 好用多了啦。开发进度没法保证,直接强制 commit 就说代码掉了,然后扯一天皮。
    Tedko
        55
    Tedko  
       2015-09-09 11:11:32 +08:00
    @est hhhhh ,别忘啦 git push -f 也可以诶啊
    est
        56
    est  
       2015-09-09 11:21:15 +08:00
    @Tedko git 的好处是分布式的,你不小心 push -f 弄掉的,别人如果有 HEAD 可以再 push -f 回来。。。 svn 就不一样啦。没了就没了,一 update 大家都没了。而且断网大家的代码就没法同步啦。只能干瞪眼啦。特别适合制度性官僚作风开发团队。
    ttma1046
        57
    ttma1046  
       2015-09-09 11:29:35 +08:00
    从 git 到 svn ,这种公司楼主你辞职算了
    cnhongwei
        58
    cnhongwei  
       2015-09-09 11:51:42 +08:00
    楼主在错误的道路上越走越远。
    9hills
        59
    9hills  
       2015-09-09 12:12:42 +08:00
    用 SVN 后就别折腾分支了, release 的时候开一个 release 分支相当于坐下 snapshot 就行了

    你要是开发的时候自己折腾分支,那是自寻苦吃。。。
    Clarencep
        60
    Clarencep  
       2015-09-09 13:16:47 +08:00
    无论是 git 还是 svn ,都可以采用相似的流程来开发。
    只是建议不要直接在 trunk 上开发,就像 git 一般不推荐直接在 master 分支开发一样,而是针对每个 feature 建立一个 branch ,然后在这个 branch 上开发测试完成后,再合到 trunk 上。
    至于老版本的问题,在老版本的 tag 或 branch 上修复完后,要及时合入 trunk 就行了。
    mio4kon
        61
    mio4kon  
       2015-09-09 13:19:02 +08:00
    以前是第一种,现在是第二种
    loveisbug
        62
    loveisbug  
       2015-09-09 13:28:26 +08:00
    方案 2 。
    startry
        63
    startry  
       2015-09-09 14:16:21 +08:00
    第一种方案。 一份代码理论上就应该保留一个发布的口, Trunk 是最好的选择。

    如果在分支上发布, 那么 Trunk 不能保证是最新最稳定的, 分支上才是最稳定的。

    如果使用第一种方案, 发布了 1.0 版本, 切换到分支开发下一版本, 1.0 出 bug 回 Trunk 进行修改。问题是 Trunk 有时候因为协同等原因会被破坏, 这个时候需要 tag 来恢复 Trunk (当然回滚也可以, tag 纯粹最为 bak )。保证无论何时多个部门多个团队协同不会出现太大的问题。

    方案二的话需要无时无刻的把 Trunk 往分支里合并, 发布后合并进入主干, 每次需要下一个发布者承担相应的风险
    582033
        64
    582033  
       2015-09-09 14:17:35 +08:00
    @zioc 可以的,只需要创建一个 "svn-remote" 加一个"git-remote",一个 git-svn dcommit ,一个 git push 即可
    ch3n2k
        65
    ch3n2k  
       2015-09-09 14:18:00 +08:00
    可以用 subgit
    LINAICAI
        66
    LINAICAI  
       2015-09-09 14:33:35 +08:00
    其实这种问题 svn 根本没法完美解决。。。

    除非结合 git 或者纯 git , svn 的分支压根就只是个目录的概念
    chemandy
        67
    chemandy  
       2015-09-09 16:17:03 +08:00
    听过 git-svn 吧...
    loveminds
        68
    loveminds  
       2015-09-09 16:41:46 +08:00
    @zioc 展讯和 MTK 以及高通...内核级或者驱动级的东西么
    holy_sin
        69
    holy_sin  
       2015-09-09 18:28:45 +08:00
    居然从 git 到 svn +1
    imbahom
        70
    imbahom  
       2015-09-09 18:57:47 +08:00
    评论看的乐的不行不行的
    zonghua
        71
    zonghua  
       2015-09-09 19:03:58 +08:00 via iPhone
    开源中国的 gitsvn 可以混在一起用,好厉害的样子
    billwang
        72
    billwang  
       2015-09-09 21:30:01 +08:00
    切,你们光见过 git svn 之流,想想我现在用的 vss 是多么奇葩,每次使用我都会发牢骚,虽然只是用来管理文档。
    leavic
        73
    leavic  
       2015-09-09 21:35:25 +08:00
    你们太在意工具链了,很多芯片公司多年来一直都是用 svn ,自己修复了 bug 验证好了再提交合并
    lenran
        74
    lenran  
       2015-09-09 22:47:31 +08:00
    @imlinhanchao 确实如此。

    可以提出不同见解。但麻烦各位还是以为 V 友“释疑,解惑”为主!

    发扬“人人为我,我为人人”的精神。

    最后,也是最重要的,不要歪楼!
    juneszh
        75
    juneszh  
       2015-09-09 23:06:19 +08:00   ❤️ 2
    不明白你们说的 svn 逆天在哪里? 什么一 update 就没有, 难道你们是直接在 svn 检出的文件夹上做本地开发的? 你们的习惯才逆天吧, 用 svn 基本上都是 svn 文件夹和本地开发文件夹分离, 用 BC 做联系的, 实际上 git 就是融合了这个步骤而已. 注重分支的当然用 git , 注重权限管理和文件保密(配置文件)的 svn 是不二之选, 那些说的 svn 是一文不值的真是醉了. 一个工具也能产生优越感.
    benatsh
        76
    benatsh  
       2015-09-09 23:44:55 +08:00
    @juneszh
    嗯,我也觉得有点狂热了,一个工具而已, SVN 文件夹和本地开发文件夹分离,每次自己再做一个拷贝,以前我们一大帮子人用的也是好好的。而且什么场景用什么工具就好了,什么都要拔到信仰的高度,这楼歪的。。。
    jianyunet
        77
    jianyunet  
       2015-09-09 23:57:51 +08:00
    聪明的程序员用 git ,真正的程序员用 svn
    lenran
        78
    lenran  
       2015-09-10 00:53:39 +08:00
    该贴已发展为 git 与 svn 的优越性探讨贴!
    jdlau
        79
    jdlau  
       2015-09-10 09:18:34 +08:00 via Android
    长见识
    leefly
        80
    leefly  
       2015-09-10 09:26:19 +08:00
    /t/219512 😂
    lizheming
        81
    lizheming  
       2015-09-10 09:47:47 +08:00
    @benatsh 那就问一个问题, svn 做分支操作的时候能不能不每次都要输入全部的 URL ? 另外删除文件的时候要区分 svn rm 和 rm 我真是有点晕啊....
    BInaryTree111
        82
    BInaryTree111  
       2015-09-10 10:01:07 +08:00
    @ifconfig 和哈哈哈哈哈哈哈哈哈哈哈哈哈哈心疼
    zioc
        83
    zioc  
    OP
       2015-09-10 10:50:06 +08:00
    @loveminds 不是。是一个 app ,支持市面上大多数手机客户端。
    zioc
        84
    zioc  
    OP
       2015-09-10 10:52:50 +08:00
    @lizheming svn 没有分支概念,别想太多,你那条语句是 copy
    lizheming
        85
    lizheming  
       2015-09-10 11:12:13 +08:00
    @zioc 据说新版有,不太清楚....
    loveminds
        86
    loveminds  
       2015-09-10 12:16:50 +08:00
    @zioc 那为啥要分展讯 MTK 高通英特尔马维尔...不都是跑在 AOSP 平台上面么,最多分个 ARMv6/7/8 , X86 和 MIPS 好了
    incompatible
        87
    incompatible  
       2015-09-10 15:43:25 +08:00
    @leonlh
    @cangshu
    @ifconfig
    @leefly
    @janon
    @learnshare
    @yhxx


    随意 at 了几位说从 git 切换至 svn 不可理喻的朋友
    谁能给我讲讲当团队人数 100 人、模块几十个这样的规模下, git 该如何做权限控制?
    (以上不是为了抬杠。我本人在大团队时一直用 clearcase 或 svn ,现在带小团队时选用了 git 。但是对团队规模和代码规模膨胀后的权限控制毫无头绪
    learnshare
        88
    learnshare  
       2015-09-10 16:00:54 +08:00
    @incompatible Git 可以控制权限,自己搭建一个 Gitlab 就可以方便管理了
    ifconfig
        89
    ifconfig  
       2015-09-10 16:24:07 +08:00
    @incompatible 请阅 Gitolite 中 Access rule 一章,一百多人是怎么做到无痛用 SVN 的,至少 dev 和 trunk 分支合并不痛苦么?
    incompatible
        90
    incompatible  
       2015-09-10 16:30:33 +08:00
    @ifconfig
    不痛苦。模块拆分是一门艺术。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1033 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.