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 呢?
1
leonlh 2015-09-08 18:05:00 +08:00
竟然有从 git 切到 svn...
|
2
maddot 2015-09-08 18:06:00 +08:00
歪一下,不是公务员才称自己上班的地方叫单位的吗
|
3
cangshu 2015-09-08 18:08:35 +08:00
SVN 用的好反人类啊。。。。
|
4
ifconfig 2015-09-08 18:17:28 +08:00
不理解用 svn , git 最好用的是分支,每次合并分支就好比在床上对着韩红撸了一回,爽!!
|
5
forcecharlie 2015-09-08 18:18:22 +08:00
svn 的逻辑还是第一种 好, trunk 做主开发,定期新建 branch 然后 修复 bug ,发布 在 tag, 修复也在 branch ,
包括 gcc subversion llvm reactos 这些项目使用 svn 托管都是这么做的。 |
6
leefly 2015-09-08 18:20:26 +08:00
竟然有从 git 切到 svn... [doge]
|
7
janon 2015-09-08 18:22:48 +08:00
竟然有从 git 切到 svn...
|
8
janon 2015-09-08 18:23:53 +08:00
只听过从 svn 切到 git 的。。。
|
9
lyragosa 2015-09-08 18:23:57 +08:00
别人都是 svn 切到 git ,这还有 git 切 svn 的……
|
10
66beta 2015-09-08 18:27:22 +08:00
哼哼,楼主公司不是唯一
怎么用?当网盘用最刁! |
11
learnshare 2015-09-08 18:28:17 +08:00
居然有从 Git 迁移到 SVN ...
|
12
zioc OP |
13
zioc OP |
15
itbdw 2015-09-08 18:41:03 +08:00
竟然从 GIT 迁移到 SVN 。。。。。
|
16
PINK0FLOYD 2015-09-08 20:45:12 +08:00
把热更新的补丁开一个分支,然后分布合并到 1.0 和 2.0 中。
|
17
kevinzhwl 2015-09-08 20:50:45 +08:00
给个方案
继续用 git + 在需要的节点时把代码推到 svn 。 |
18
Menng 2015-09-08 20:52:30 +08:00
居然会从 Git 迁移到 SVN
|
19
wizardoz 2015-09-08 20:53:23 +08:00
竟然从 GIT 迁移到 SVN
|
20
perpyy 2015-09-08 20:57:31 +08:00
居然会从 Git 迁移到 SVN, 我报警了!
|
21
Phariel 2015-09-08 21:05:55 +08:00 via Android
竟然从 git 迁到 svn ,我真是日了 doge 了。。。
|
23
zioc OP |
24
zioc OP @PINK0FLOYD 这个想过,麻烦
|
26
yhxx 2015-09-08 21:33:19 +08:00
好神奇。。。竟然从 git 迁移到 SVN 。。。。
|
27
LINAICAI 2015-09-08 21:37:00 +08:00
从 git 迁移到 SVN
+ 10086 |
28
xuxanwan 2015-09-08 21:40:32 +08:00
....git --> svn 你这是倒着走啊
|
29
lightening 2015-09-08 21:45:03 +08:00
不能用 git-svn 吗?
|
30
ChanneW 2015-09-08 21:45:32 +08:00
自己试过方案 1 ,感觉 trunk 不好。
当前的公司方案 2 , tag 作为发布,和 git 用的流程差不多。 |
31
ostholz 2015-09-08 22:06:15 +08:00
很多大公司的代码管理是比较拖后的。 这个是也没有办法的事儿。
|
32
JobsLong 2015-09-08 23:11:23 +08:00
有个工具好像叫做: git-svn 可以互相转换
|
33
billlee 2015-09-08 23:20:09 +08:00
公司 SVN 还能怎么用,当 FTP 用啊
|
34
jhdxr 2015-09-08 23:20:56 +08:00
这么多无意义的吐槽也真是醉了。。。虽然。。。我也想吐槽。。。
之前在阿里用的接近模式 2 ,每次任务基于 trunk 新开一个分支,上线的时候合并回 trunk 。 至于 LZ 你所提到的情况, svn 也是有分支合并功能的啊!!! |
36
FrankFang128 2015-09-09 01:15:43 +08:00
svn 很难用,你只用 update 和 commit 两个功能就好啦 ~~~
|
37
Tedko 2015-09-09 01:24:49 +08:00
你用 git svn 之类的工具好了 n 。开发时候还是用 git
|
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 上回归测试的方式 |
39
Wangxf 2015-09-09 01:44:33 +08:00 via iPhone
svn 几乎 0 学习成本,下载个小乌龟就行了
|
40
forcecharlie 2015-09-09 03:54:59 +08:00
@zioc 查看 svn merge 命令,也可以获得 修改的 diff 然后 trunk 合并。
|
41
582033 2015-09-09 07:04:08 +08:00 via Android
用 git-svn 呗,我也是从 git 换到 svn 。
|
43
hpeng 2015-09-09 08:04:23 +08:00 via Android
@incompatible 真特么规范!我现在公司全部在 trunk 开发…内网构建一周挂个 2 到 3 次……每次挂了的心情简直就是 doge
|
44
newghost 2015-09-09 08:35:10 +08:00
没觉得 SVN 有什么不好
|
45
imlinhanchao 2015-09-09 08:48:39 +08:00 4
V2 社区有一种同,当有人不同时,若他提出疑问,疑问将很难被解答,若他提出观点时,观点会被打压,若他分享时,分享的事物将被贬低。但这又有什么关系呢,任何人类社区,无论线上还是线下,都是不可避免的会朝这样的结果发展。因为,社区本来就是因为观点相似才聚在一起的呀~
|
46
xiaoyao9933 2015-09-09 09:07:05 +08:00
svn 确实有点反人类。。
|
47
Menng 2015-09-09 09:23:47 +08:00
第二种,发布时用 Git
|
48
yuankui 2015-09-09 09:59:21 +08:00
见过 svn 迁 git 的,还没见过 git 迁 svn 的
|
49
Navee 2015-09-09 10:05:21 +08:00
一大波喷子正在来袭
|
50
kobe1941 2015-09-09 10:07:15 +08:00
从 git 到 svn ,这种公司楼主你辞职算了
|
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 上开发。 |
52
zioc OP @incompatible 谢谢。很受用!
@jhdxr 谢谢分享! @582033 @Tedko git-svn 可靠吗,是不是可以这样:本地 git ,远程 1 git ,远程 2 svn 。维持原有的 git remote 做小组内部更新(较频繁的提交),用 git-svn 每天一次提交 git 的代码到 svn |
53
holmesabc 2015-09-09 10:57:43 +08:00
公司 svn 就只做一个仓库来用. 一个在开发的, 其它都是 tag.
反正主线 分支 tag 都是完全的文件 copy 跟 git 思想不一样, 还是不要完全搬 git 的规则的好. 就用 1 方案好了. 感觉 svn 目录切来切去很麻烦的. |
54
est 2015-09-09 11:00:31 +08:00
切 svn 好用多了啦。开发进度没法保证,直接强制 commit 就说代码掉了,然后扯一天皮。
|
56
est 2015-09-09 11:21:15 +08:00
@Tedko git 的好处是分布式的,你不小心 push -f 弄掉的,别人如果有 HEAD 可以再 push -f 回来。。。 svn 就不一样啦。没了就没了,一 update 大家都没了。而且断网大家的代码就没法同步啦。只能干瞪眼啦。特别适合制度性官僚作风开发团队。
|
57
ttma1046 2015-09-09 11:29:35 +08:00
从 git 到 svn ,这种公司楼主你辞职算了
|
58
cnhongwei 2015-09-09 11:51:42 +08:00
楼主在错误的道路上越走越远。
|
59
9hills 2015-09-09 12:12:42 +08:00
用 SVN 后就别折腾分支了, release 的时候开一个 release 分支相当于坐下 snapshot 就行了
你要是开发的时候自己折腾分支,那是自寻苦吃。。。 |
60
Clarencep 2015-09-09 13:16:47 +08:00
无论是 git 还是 svn ,都可以采用相似的流程来开发。
只是建议不要直接在 trunk 上开发,就像 git 一般不推荐直接在 master 分支开发一样,而是针对每个 feature 建立一个 branch ,然后在这个 branch 上开发测试完成后,再合到 trunk 上。 至于老版本的问题,在老版本的 tag 或 branch 上修复完后,要及时合入 trunk 就行了。 |
61
mio4kon 2015-09-09 13:19:02 +08:00
以前是第一种,现在是第二种
|
62
loveisbug 2015-09-09 13:28:26 +08:00
方案 2 。
|
63
startry 2015-09-09 14:16:21 +08:00
第一种方案。 一份代码理论上就应该保留一个发布的口, Trunk 是最好的选择。
如果在分支上发布, 那么 Trunk 不能保证是最新最稳定的, 分支上才是最稳定的。 如果使用第一种方案, 发布了 1.0 版本, 切换到分支开发下一版本, 1.0 出 bug 回 Trunk 进行修改。问题是 Trunk 有时候因为协同等原因会被破坏, 这个时候需要 tag 来恢复 Trunk (当然回滚也可以, tag 纯粹最为 bak )。保证无论何时多个部门多个团队协同不会出现太大的问题。 方案二的话需要无时无刻的把 Trunk 往分支里合并, 发布后合并进入主干, 每次需要下一个发布者承担相应的风险 |
64
582033 2015-09-09 14:17:35 +08:00
@zioc 可以的,只需要创建一个 "svn-remote" 加一个"git-remote",一个 git-svn dcommit ,一个 git push 即可
|
65
ch3n2k 2015-09-09 14:18:00 +08:00
可以用 subgit
|
66
LINAICAI 2015-09-09 14:33:35 +08:00
其实这种问题 svn 根本没法完美解决。。。
除非结合 git 或者纯 git , svn 的分支压根就只是个目录的概念 |
67
chemandy 2015-09-09 16:17:03 +08:00
听过 git-svn 吧...
|
69
holy_sin 2015-09-09 18:28:45 +08:00
居然从 git 到 svn +1
|
70
imbahom 2015-09-09 18:57:47 +08:00
评论看的乐的不行不行的
|
71
zonghua 2015-09-09 19:03:58 +08:00 via iPhone
开源中国的 gitsvn 可以混在一起用,好厉害的样子
|
72
billwang 2015-09-09 21:30:01 +08:00
切,你们光见过 git svn 之流,想想我现在用的 vss 是多么奇葩,每次使用我都会发牢骚,虽然只是用来管理文档。
|
73
leavic 2015-09-09 21:35:25 +08:00
你们太在意工具链了,很多芯片公司多年来一直都是用 svn ,自己修复了 bug 验证好了再提交合并
|
74
lenran 2015-09-09 22:47:31 +08:00
|
75
juneszh 2015-09-09 23:06:19 +08:00 2
不明白你们说的 svn 逆天在哪里? 什么一 update 就没有, 难道你们是直接在 svn 检出的文件夹上做本地开发的? 你们的习惯才逆天吧, 用 svn 基本上都是 svn 文件夹和本地开发文件夹分离, 用 BC 做联系的, 实际上 git 就是融合了这个步骤而已. 注重分支的当然用 git , 注重权限管理和文件保密(配置文件)的 svn 是不二之选, 那些说的 svn 是一文不值的真是醉了. 一个工具也能产生优越感.
|
76
benatsh 2015-09-09 23:44:55 +08:00
@juneszh
嗯,我也觉得有点狂热了,一个工具而已, SVN 文件夹和本地开发文件夹分离,每次自己再做一个拷贝,以前我们一大帮子人用的也是好好的。而且什么场景用什么工具就好了,什么都要拔到信仰的高度,这楼歪的。。。 |
77
jianyunet 2015-09-09 23:57:51 +08:00
聪明的程序员用 git ,真正的程序员用 svn
|
78
lenran 2015-09-10 00:53:39 +08:00
该贴已发展为 git 与 svn 的优越性探讨贴!
|
79
jdlau 2015-09-10 09:18:34 +08:00 via Android
长见识
|
81
lizheming 2015-09-10 09:47:47 +08:00
@benatsh 那就问一个问题, svn 做分支操作的时候能不能不每次都要输入全部的 URL ? 另外删除文件的时候要区分 svn rm 和 rm 我真是有点晕啊....
|
82
BInaryTree111 2015-09-10 10:01:07 +08:00
@ifconfig 和哈哈哈哈哈哈哈哈哈哈哈哈哈哈心疼
|
86
loveminds 2015-09-10 12:16:50 +08:00
@zioc 那为啥要分展讯 MTK 高通英特尔马维尔...不都是跑在 AOSP 平台上面么,最多分个 ARMv6/7/8 , X86 和 MIPS 好了
|
87
incompatible 2015-09-10 15:43:25 +08:00
|
88
learnshare 2015-09-10 16:00:54 +08:00
@incompatible Git 可以控制权限,自己搭建一个 Gitlab 就可以方便管理了
|
89
ifconfig 2015-09-10 16:24:07 +08:00
@incompatible 请阅 Gitolite 中 Access rule 一章,一百多人是怎么做到无痛用 SVN 的,至少 dev 和 trunk 分支合并不痛苦么?
|
90
incompatible 2015-09-10 16:30:33 +08:00
@ifconfig
不痛苦。模块拆分是一门艺术。 |