Subversion将trunk合并到现有标签中

时间:2011-01-28 07:15:20

标签: svn merge tags branch

我目前在我的SVN存储库中进行了以下设置:

-Root
--ProjectA
----trunk
----tags
----branches
--ProjectB
----trunk
----tags
----branches
--ProjectPool
----projectA
----projectB

ProjectPool包含ProjectA和ProjectB的特定标记。

现在ProjectPool中的标签不时发生变化。这意味着ProjectA的特定主干版本已提交,我想从此修订版创建一个副本到Root / ProjectPool / projectA。新标记应替换旧标记,但应该有可用的历史记录。

它就像在我的电脑上有一个分支,我永远不会改变,并不时将主干合并到它。但它应该完全在存储库中完成。 (无需登记/结账等)

这将允许我查看Root / ProjectPool / projectA的历史记录并查看它的更改。一种高级修订历史。

更新
对不起,我忘了问一个明确的问题 - .- 在查看到目前为止已经到达的答案之后,我会说ProjectPool中的项目副本是原始项目的分支。然后我可以在ProjectPool中需要新版本的时候将它们从trunk合并。
现在的问题是,如果有办法合并“在线”,则无需先创建工作副本。

2 个答案:

答案 0 :(得分:9)

  

>>现在,ProjectPool中的代码会不时更改。

Tags是里程碑,它们不应该改变。您应该在每个版本上创建一个新标记。

  

>>这意味着提交了ProjectA的特定主干版本,我想从此修订版创建一个副本到Root / ProjectPool / projectA。新标记应替换旧标记,但应该有可用的历史记录。

您需要的是branch下的ProjectA ProjectPool trunk,您可以与 ProjectA重复合并 svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH] 。有这样的东西

-Root
    +--ProjectPool
        +--ProjectA
            +----trunk
            +----tags 
            +----branches
        +--ProjectB
            +----trunk
            +----tags
            +----branches

参考:http://svnbook.red-bean.com/en/1.5/svn.ref.svn.c.merge.html

  

>>这将允许我查看Root / ProjectPool / projectA的历史记录并查看其更改。一种高级修订历史。

看起来您已经开始使用目录结构了。如果可能的话,我建议你遵循这个结构。

tag

您可以在trunk发布 ProjectA和ProjectB。较新的开发将在branch继续。对于任何侧面开发或现场发布,请在branches目录中创建trunk。分支完成后,将其合并回主干。这样,您的{{1}}将始终反映所有修订和更改。而且,这更方便(和传统)。

希望这有帮助。

答案 1 :(得分:0)

你真的没有提出任何问题,所以我不确定你是否知道merge子命令,但那是你需要的那个:

特别注意--accept参数;你需要它来获得自动冲突解决方案:

C:\>svn help merge
[...]
  --accept ARG             : specify automatic conflict resolution action
                            ('postpone', 'base', 'mine-conflict',
                             'theirs-conflict', 'mine-full', 'theirs-full',
                             'edit', 'launch')

我还建议阅读Subversion书中的Branching and merging章节。