帮我理解Svn合并

时间:2009-10-02 21:23:36

标签: svn tortoisesvn merge vendor-branch

我不明白svn merge。这是场景:

我们有一个分支,其中包含我们代码的最新稳定副本。我将这个分支称为“分支”。还有一个主干分支,其中包含一些新增功能,但我们现在不想搞砸它。

我们有一个供应商分支,其中包含我们的应用运行的库的更新版本。我想将此供应商分支中的新更改与“分支”合并,以便我们可以获得对库的更新,而无需逐个文件地查找,并找出新的内容。 不,谢谢

现在,我意识到这可能很简单,但是我已经尝试了很多的东西,并且阅读了很多的教程,但我仍然无法包装我的准确地说,我应该与什么合并。

为了记录,我正在使用Tortoise。

编辑: 这是一个澄清,但我们的应用程序在根级别运行库。我不知道这是否重要。所以'分支'与'供应商'基本相同,但随着我们的变化。

2 个答案:

答案 0 :(得分:1)

这样的事情应该为你做。 Subversion很好地理解标准差异和diff3,但它并不总是与第三方(图形)差异实用程序很好用。

$ cd "the branch"
$ svn merge --diff3-cmd=diff3 svn+ssh://yourrepository/path/to/vendor_branch"

答案 1 :(得分:1)

Vendor branches是一种技术,允许您针对外部代码库维护自己的补丁,同时保持吸收新版本的能力(“供应商丢弃”)。这涉及合并您自己的更改和供应商更改。我不建议尝试使用合并这样的第一个实验,因为它是一个先进而复杂的用例。

但是,听起来您根本没有修改第三方代码。升级到较新版本的第三方代码因此不应涉及合并。

诀窍是将您自己的代码和第三方代码分开(它们单独的项目)并将它们与svn:externals结合在一起。示例存储库布局:

/externallib/1.0
/externallib/2.0
/project/trunk
/project/trunk/externallib

/project/trunk/externallib文件夹实际上并不存在于存储库中,但由于具有此值的trunk文件夹上的svn:externals属性,它出现在您的工作副本中:

^/externallib/1.0 externallib 

将主干升级到外部库的2.0版本就是将svn:externals定义更改为:

^/externallib/2.0 externallib 

请注意,您应该将externallib版本视为标记;如果你开始修改它们,你将影响/ project / trunk / externallib的内容而没有/ project / trunk中的任何显式提交,这是一件坏事。