我不明白svn merge。这是场景:
我们有一个分支,其中包含我们代码的最新稳定副本。我将这个分支称为“分支”。还有一个主干分支,其中包含一些新增功能,但我们现在不想搞砸它。
我们有一个供应商分支,其中包含我们的应用运行的库的更新版本。我想将此供应商分支中的新更改与“分支”合并,以便我们可以获得对库的更新,而无需逐个文件地查找,并找出新的内容。 不,谢谢。
现在,我意识到这可能很简单,但是我已经尝试了很多的东西,并且阅读了很多的教程,但我仍然无法包装我的准确地说,我应该与什么合并。
为了记录,我正在使用Tortoise。
编辑: 这是一个澄清,但我们的应用程序在根级别运行库。我不知道这是否重要。所以'分支'与'供应商'基本相同,但随着我们的变化。
答案 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中的任何显式提交,这是一件坏事。