2011-01-28 63 views
0

我目前有我的SVN存储库以下设置:颠覆主干合并到现有的标签

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

凡ProjectPool包含项目A和项目B的特定标签。现在

的标签ProjectPool变化不时。这意味着项目A的特定主干版本将提交和我想创建这些版本的拷贝到根/ ProjectPool /了projectA。新的标签应该替换旧的标签,但应该有可用的历史记录。

它喜欢有我的电脑上一个分支,我从来没有改变,并时不时地合并到主干它。但它应该完全在存储库上完成。 (无需签入/签等)

这将让我寻找到根/ ProjectPool /了projectA的历史,看看它的变化。一种高级修订历史。

UPDATE:
对不起,我忘了问一个清晰的问题-.-
查看已抵达到现在为止的答案后,我会说,项目在ProjectPool的副本均为分支原来的项目。然后,我可以随时将它们从主干合并到我需要ProjectPool中的新版本。
现在的问题是,如果有一种方法做合并“在线”,而无需首先创建一个工作拷贝。

回答

7

> >现在ProjectPool中的标签会不时变化。

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

> >这意味着项目A的特定主干版本将提交,我想从这个版本到根/ ProjectPool /了projectA创建副本。新的标签应该替换旧的标签,但应该有可用的历史记录。

你所需要的是什么ProjectAProjectPoolbranch,你可以重复使用的ProjectAtrunk合并。像这样的东西

svn merge sourceURL1[@N] sourceURL2[@M] [WCPATH] 

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

> >这将让我寻找到根/ ProjectPool /了projectA的历史,看看它的变化。一种高级修订历史。

貌似你们用自己的目录结构先行一步。如果可能的话,我建议你遵循这个结构。

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

可以释放项目A和项目B在其tag秒。更新的开发将继续在trunk。对于任何一方的开发或现货发布,请在分支目录中创建一个branch。分支完成后,将其合并回主干。这样您的trunk将始终反映所有修订和更改。而且,这更方便(和传统)。

希望这会有所帮助。

+1

+1完美的解释 – 2011-01-28 09:33:59

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章。安全/健全回购布局