如果可以的话,我需要在这里进行健全检查,非常欢迎任何关于纠正/改变以下内容的想法!我们已经使用我们的SVN进入了最后阶段,并试图通过放置Trunk/Release系统来纠正它.
我们开发了一个大型网站,我们将它们全部存储在SVN中.以下是我们的想法:
所以我们把所有这些都放在了自己的位置.除了它不工作和继承人为什么.
我们同时处理很多不同的功能/修复/问题并且它们并没有很好地检查功能完整(但总是至少工作).然后,有时你必须等待客户签字.结果,你最终得到了"准备就绪"的修订版,其中散布着"仍然在工作中"的版本.这意味着已完成的修订不会按顺序合并但不按顺序合并.我认为SVN可以处理这个,聪明的小东西,但显然不是.
下面是一个例子:
这导致网站被破坏,而Release分支几乎没用.
所以我们尝试了其他一些想法,例如将Release恢复为"Latest",然后按顺序合并所有修订版1,2和3.这个工作正常,直到我们的版本4还没有为现场做好准备,修订版5就是.突然间,我们又遇到了完全相同的问题!
好的,拿三个.恢复到最新,合并修订版5,然后将任何更新重新发送回Head.树冲突嘉豪!所以这不是没有.
我破获年底建成这一切manaually但它不是我想要做定期,最好我想剧本我们的部署,但不能同时发行是在这样一个烂摊子.
救命!我们做错了什么?我似乎无法找到任何解决方案来解决这个问题,即在发布中需要不同的顺序修订.如果它不可能那么好但是我们的意思是如何让事情变得容易.我们不能分支每一个变化,该网站需要30分钟+检查它将花费太长时间.
旁注,我们正在使用TortoiseSVN,所以我们可以在任何答案中将命令行示例保持在最低限度吗?
最新版本的TSVN和SVN版本1.6因此我们有时髦的合并跟踪等.
编辑:一篇优秀的博客文章,处理开发/发布周期(尽管使用GIT,但仍然相关),如果他们发现这个问题很有趣,那么每个人都想阅读它.(http://nvie.com/git-model)
编辑2:我写了一篇博客文章,介绍如何在你的网站上展示你正在研究哪个分支,其他人问我这个问题(http://www.offroadcode.com/2010/5/14/which-svn-branch-你在工作.aspx).希望有所帮助.与此同时,我们正在寻找窑,并希望下个月能够切换(gulp!)
Von*_*onC 13
我们做错了什么?
您正在一个分支上进行多项开发工作,并且这些工作不应该同时进行(因为它们的生命周期不同,即它们不会同时发布)
您应该为每个开发工作(而不是每个开发人员)定义一个分支,并在预发布分支中合并这些分支(以集成所有已批准的发展版本),并在所有开发已经一起验证时最终合并到Release.
如果每个开发人员的每个开发都是相当顺序的,那就意味着每个开发人员可以为每个常规任务保留一个工作空间,并仅检查该组任务的相关工作空间:实际更改的文件数量很少,大大减少了结帐时间.
看到:
让我们尝试你描述的场景,看看实际发生了什么(我使用命令行有明显的原因,但它在TortoiseSVN中的工作方式相同):
# let's create a simple repository for testing and add some baseline data:
$ svnadmin create test
$ svn import baseline file:///path/to/repo/test/trunk -m "Import baseline"
Adding baseline/other.txt
Adding baseline/css.txt
Committed revision 1.
# now create a branch:
$ svn copy file:///path/to/repo/test/trunk file:///path/to/repo/test/branches/r1 -m "branched" --parents
Committed revision 2.
# Pete changes some CSS to make a new button look pretty (Revision 3)
$ svn co file:///path/to/repo/test/trunk Pete-trunk
A Pete-trunk/other.txt
A Pete-trunk/css.txt
Checked out revision 2.
$ svn diff Pete-trunk/
Index: Pete-trunk/css.txt
===================================================================
--- Pete-trunk/css.txt (revision 2)
+++ Pete-trunk/css.txt (working copy)
@@ -1,3 +1,3 @@
This is a test
-more lines
+more lines Pete's change
even more
$ svn commit Pete-trunk/ -m "Pete's first change"
Sending Pete-trunk/css.txt
Transmitting file data .
Committed revision 3.
# meanwhile, Dave add some CSS to the bottom of the same CSS file as Pete's for a new feature (Revision 4)
$ svn co file:///path/to/repo/test/trunk Dave-trunk
A Dave-trunk/other.txt
A Dave-trunk/css.txt
Checked out revision 3.
$ svn diff Dave-trunk/Index: Dave-trunk/css.txt
===================================================================
--- Dave-trunk/css.txt (revision 3)
+++ Dave-trunk/css.txt (working copy)
@@ -1,3 +1,4 @@
This is a test
more lines Pete's change
even more
+Dave's change
$ svn commit Dave-trunk/ -m "Dave's change"Sending Dave-trunk/css.txt
Transmitting file data .
Committed revision 4.
# Dave's mod gets the nod so he merges it into Release and commits it (Revision 5)...
$ svn co file:///path/to/repo/test/branches/r1 Dave-branch
A Dave-branch/other.txt
A Dave-branch/css.txt
Checked out revision 4.
$ svn merge -c4 file:///path/to/repo/test/trunk Dave-branch
--- Merging r4 into 'Dave-branch':
U Dave-branch/css.txt
$ svn diff Dave-branch/
Property changes on: Dave-branch
___________________________________________________________________
Added: svn:mergeinfo
Merged /trunk:r4
Index: Dave-branch/css.txt
===================================================================
--- Dave-branch/css.txt (revision 4)
+++ Dave-branch/css.txt (working copy)
@@ -1,3 +1,4 @@
This is a test
more lines
even more
+Dave's change
$ svn commit Dave-branch/ -m "Merged Dave's change to release"
Sending Dave-branch
Sending Dave-branch/css.txt
Transmitting file data .
Committed revision 5.
# Pete adds more buttons to finish this mod, no CSS changes here though (Revision 6)
$ svn diff Pete-trunk/Index: Pete-trunk/other.txt
===================================================================
--- Pete-trunk/other.txt (revision 2)
+++ Pete-trunk/other.txt (working copy)
@@ -1 +1,2 @@
-another file
\ No newline at end of file
+another file
+Unrelated change
\ No newline at end of file
$ svn commit Pete-trunk/ -m "Pete's second change"Sending Pete-trunk/other.txt
Transmitting file data .
Committed revision 6.
# Pete then merges his mods (Revision 3 and 6) into the Head of Release (which has Daves merge in it)
$ svn co file:///path/to/repo/test/branches/r1 Pete-branch
A Pete-branch/other.txt
A Pete-branch/css.txt
U Pete-branch
Checked out revision 6.
$ svn merge -c3,6 file:///path/to/repo/test/trunk Pete-branch
--- Merging r3 into 'Pete-branch':
U Pete-branch/css.txt
--- Merging r6 into 'Pete-branch':
U Pete-branch/other.txt
$ svn diff Pete-branch/
Property changes on: Pete-branch
___________________________________________________________________
Modified: svn:mergeinfo
Merged /trunk:r3,6
Index: Pete-branch/other.txt
===================================================================
--- Pete-branch/other.txt (revision 6)
+++ Pete-branch/other.txt (working copy)
@@ -1 +1,2 @@
-another file
\ No newline at end of file
+another file
+Unrelated change
\ No newline at end of file
Index: Pete-branch/css.txt
===================================================================
--- Pete-branch/css.txt (revision 6)
+++ Pete-branch/css.txt (working copy)
@@ -1,4 +1,4 @@
This is a test
-more lines
+more lines Pete's change
even more
Dave's change
$ svn commit Pete-branch/ -m "Merged Pete's changes"Sending Pete-branch
Sending Pete-branch/css.txt
Sending Pete-branch/other.txt
Transmitting file data ..
Committed revision 7.
# Now the test: is Dave's change still there? Yes!
$ svn cat file:///path/to/repo/test/branches/r1/css.txt
This is a test
more lines Pete's change
even more
Dave's change
Run Code Online (Sandbox Code Playgroud)
这个问题没有发生,看到了吗?如果我们以不同的顺序完成这些步骤,那么这仍然是真的 - 试试吧!
那么什么可能出错?最有可能解决合并冲突:
例如,在Dave合并他的更改之前,也许Pete检查了他的分支工作副本.他仍然可以合并他的变化,但是当他试图提交时,svn会抱怨他的工作副本已经过时了.他必须更新他的工作副本.这将把Dave的变化添加到他的工作副本中; 由于Dave的更改会影响Peter也改变的同一文件,因此SVN会尝试合并文件中的更改.如果更改相距很远,则会自动成功.
但是如果更改位于同一行,或者彼此非常接近,SVN将无法合并它们,并将它们标记为冲突.现在皮特必须解决冲突.一种选择是简单地使用他的版本,丢弃Dave的变化.如果他这样做,戴夫的改变就会丢失.相反,他必须编辑文件(使用TortoiseMerge,或者可能手工编辑),以便它包含两个更改.
| 归档时间: |
|
| 查看次数: |
3663 次 |
| 最近记录: |