繁体   English   中英

svn:合并分支

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM