2010-09-20 134 views
3

我有一个存储库,其中有一个嵌套存储库,使用svn:externals属性更新外部库中的文件。问题是我需要从这个库中的一个头文件中注释掉一个函数声明,并且将修改后的头文件放在根存储库中。Subversion svn:外部文件覆盖?

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

+0

+1,我想这样的选择,但我还没有找到它。 – Wrikken 2010-09-20 19:03:57

回答

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的/库,并承诺


如何在没有丢失所做的修改

下载库的最新原释放到^ /供应商更新库/库/当前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 

利润


相反分支“当前”,直接到你的项目,你可以跳转到一个“我 - 修改 - 库”目录,并通过外部组件利用它的。如果您有多个需要相同库的修改版本的项目,建议您这样做。

请记住,供应商分支在处理重命名和删除时会遇到问题,因为这些分支不能通过覆盖进行跟踪。跨版本库合并是SVN的一个不同而又相当年轻的话题。

如果你尝试一下,反馈给我们如何去:)

克里斯托夫

+0

还没有尝试过,但它似乎会工作。如果我有麻烦,我会稍后再尝试并留下反馈意见。谢谢。 – Jengerer 2010-09-28 01:26:46

0

有没有内置的功能来帮助你做到这一点。

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