[英]svn: merging branches
我对在SVN中合并分支尚不清楚,并且想知道是否有人可以解释...
project1
trunk
foo.c
bar.c
baz.c
branches
tags
project2
trunk
foo.c
quux.c
boing.c
branches
project1-offshoot
foo.c
bar.c
baz.c
boing.c
tags
假设我们有以下情况。 我们的svn存储库中有一个“ project1”。 鲍勃开始一个新项目“ project2”,并开始在树干下工作。 然后查理说:“等等,这有点像project1!” 因此,他告诉鲍勃,他将为project2创建一个名为“ project1-offshoot”(来自project1 / trunk的svn copy
)的分支,并对其进行适当的修改以准备好与project2合并。
Bob和Charlie采取什么适当的措施将project2 / branches / project1-offshoot合并到project2 / trunk中?
文件“ foo.c”和“ boing.c”每个都有两个独立的历史记录(来自project1 / trunk的foo-> project2 / branches / project1-offshoot以及来自project2 / trunk的文件;来自project2 / trunk和来自project2 / branch的文件/ PROJECT1-分支)。 SVN中的文件可以有两个祖先吗? 还是您被迫选择一个作为祖先,然后从另一个文件进行文本合并,而又不保持与该文件源的任何链接?
您可能需要将merge
命令与--ignore-ancestry
选项一起使用,因为源文件具有独立的历史记录,没有共享的祖先。
从Ben Collins-Sussman,Brian W.Fitpatrick和C.Michael Pilato撰写的Subversion版本控制(适用于Subversion 1.5)中:
“大多数合并涉及比较彼此祖先相关的树;因此,svn merge默认为这种行为。但是,有时候,您可能希望merge命令比较两个不相关的树。”
“如果您要求svn merge比较两棵树,则会看到整个第一棵树都被删除,然后添加了整个第二棵树!在这种情况下,您将希望svn merge进行基于路径的比较仅-忽略文件和目录之间的任何关系。将--ignore-ancestry选项添加到您的merge命令中,其行为类似于svn diff。(相反,--notice-ancestry选项将导致svn diff行为类似于svn merge命令。)”
如果我正确理解了您的第二个问题(即“ SVN中的文件可以有两个祖先吗?”),答案是否定的。 您要么必须将project1中的更改合并到Project 2中,反之亦然。
只需注意一下:通常,项目的branchs文件夹是为该特定项目的干线的分支保留的,这意味着只有project1的干线的分支进入project1的branchs文件夹。 当然,没有什么可以阻止任何人做不同的事情,但这确实可以使事情变得干净整洁。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.