我的一个项目有一个存储库,该存储库有一个嵌套存储库,使用该svn:externals
属性从外部库更新文件。问题是我需要从这个库中的一个头文件中注释掉一个函数声明,并将修改后的头文件与根存储库一起携带。
有没有办法可以做到这一点,以便在更新库时,它会用我的版本覆盖该特定文件?
我的一个项目有一个存储库,该存储库有一个嵌套存储库,使用该svn:externals
属性从外部库更新文件。问题是我需要从这个库中的一个头文件中注释掉一个函数声明,并将修改后的头文件与根存储库一起携带。
有没有办法可以做到这一点,以便在更新库时,它会用我的版本覆盖该特定文件?
你想要的对我来说听起来像是一个“供应商分支”场景。
当前存储库
root
|-- myproject
|
-- mycode
|
-- library -> svn:externals to a remote svn or your own libraryproject
建议的存储库
root
|-- myproject
|
-- mycode
|
-- library -> copied/branched from ^/vendor/library/current (modified at this location as much as you like)
|
-- vendor
|
--library
|
--current
|
--imported-version-1.0
|
--imported-version-1.1
如何创建布局
创建 ^/vendor/library/current 并将未修改的原始库代码下载到其中。
svn commit ^/vendor/library/current
svn cp ^/vendor/library/current ^/vendor/library/imported-version-1.0 (tag the import)
svn cp ^/vendor/library/current ^/myproject/library (branch the code into your project)
修改 ^/myproject/library 并提交
如何在不丢失修改的情况下更新库
将库的最新原始版本下载到 ^/vendor/library/current OVERWRITING 文件中。
svn commit ^/vendor/library/current (checks in the difference between the two library releases)
svn cp ^/vendor/library/current ^/vendor/library/imported-version-1.1 (tag the change)
cd /your-local-workspace/myproject/library (will be merge target)
svn merge ^/vendor/library/current (get all CHANGES from the upstream branch and apply them to your modified library)
svn commit
利润
您可以分支到“my-modified-libs”目录并通过外部使用它,而不是直接将“当前”分支到您的项目中。如果您有多个需要相同修改版本的库的项目,建议您这样做。
请记住,供应商分支在处理重命名和删除时会遇到问题,因为这些无法通过覆盖来跟踪。对于 SVN 来说,跨存储库合并是一个不同且相当年轻的话题。
如果您尝试一下,请向我们提供反馈:)
克里斯托夫
没有内置功能可以帮助您解决此问题。
处理这个问题的一般做法是:创建您正在使用的库的一个分支,然后在那里进行您需要的更改,并将新创建的分支用作根项目的外部。根据我的经验,我发现这是解决您描述的问题的简单有效的方法。