Subversion svn:externals文件覆盖?

时间:2010-09-20 18:45:47

标签: file svn override svn-externals

我有一个我的项目的存储库,它有一个嵌套的存储库,使用svn:externals属性来更新外部库中的文件。问题是我需要从这个库中的一个头文件中注释掉一个函数声明,并带有修改后的头与root存储库。

有没有办法可以做到这一点,以便在更新库时,它会使用我的版本覆盖该特定文件?

2 个答案:

答案 0 :(得分:7)

你想要的东西听起来像是“供应商分支”的情景。

当前存储库

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的另一个相当年轻的主题。

如果您尝试一下,请向我们提供反馈意见:)

了Christoph

答案 1 :(得分:0)

没有内置功能可以帮助您解决此问题。

处理此问题的一般做法是:创建您正在使用的库的分支,然后在那里进行所需的更改,并使用新创建的分支作为根项目的外部。根据我的经验,我发现这是解决您所描述问题的简单而有效的解决方案。