我目前在我的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合并。
现在的问题是,如果有办法合并“在线”,则无需先创建工作副本。
答案 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章节。