不确定如何问这个。我想以成熟且积极更新的开源项目为基础,以此为基础进行调整和学习。我希望能够将代码添加到本地源中,但是能够在改进核心资源的同时保留我的附加组件,从而对其进行更新。

目的是使基础始终保持最新状态,并将我的代码添加到更新的版本中(而不是被更改所覆盖,就像我想象的那样,如果按原样编辑源代码会发生这种情况)。

有没有一种方法可以将我的代码“修补”到更新的项目代码上,所以当用svn更新核心源代码时,我的更改将保持与基础无关吗?我敢肯定有一种简单的方法可以做到这一点,但是我对编程/svn/版本控制还是陌生的,也不知道该看什么或在哪里看。

最佳答案

您在寻找什么叫做SVN Vendor Branches

基本上,您在存储库中仅为项目的基线版本保留了一个单独的分支,然后将项目版本之间的更改合并到主干中。

例如:

svn import ./projectdir svn://repourl/project/branches/vendor/current/ -m 'Home for current core version of source code'
svn copy svn://repourl/project/branches/vendor/current/ svn://repourl/project/branches/vendor/1.0.0/ -m '1.0.0 tag of core source code'
svn copy svn://repourl/project/branches/vendor/current/ svn://repourl/project/trunk/ -m 'Initial trunk commit of 1.0.0'

我们现在拥有的是:
  • 一个“当前”分支,具有您正在使用的最新核心代码版本。
  • 核心代码的“1.0.0”标签(您不应对此标签进行任何新更改)
  • 您的中继,现在具有1.0.0的核心代码。

  • 现在,假设您已经在该项目上工作了几个月,并且已经在您的主干中对该项目进行了大量更新。核心版本1.1.0出现了,您想利用一些新功能而不丢失现有工作。

    您可以为此使用供应商分支。
    svn co svn://repourl/project/branches/vendor/current/ ./project
    

    * 在工作副本顶部提取版本1.1.0 *
    svn status | grep -E '^?' | xargs svn add # add all new files/directories to the project
    svn status | grep -E '^!' | xargs rm -rf  # remove all files/directories from the project that have been deleted
    svn commit -m 'Version 1.1.0 of the core code'
    svn copy svn://repourl/project/branches/vendor/current/ svn://repourl/project/branches/vendor/1.1.0 -m 'Tag for 1.1.0'
    rm -rf ./project
    

    现在,我们有什么?我们有:
  • 项目
  • 版本1.0.0的标记
  • 项目
  • 版本1.1.0的标记
  • 具有我们要更新的项目的修改版本的主干。

  • 那么,我们需要做什么?一个简单的合并。
    svn co svn://repourl/project/trunk ./project
    svn merge svn://repourl/branches/vendor/1.0.0 svn://repourl/branches/vendor/1.1.0 ./project
    

    您要告诉SVN在上面的行中执行的操作基本上是:“找到项目的1.0.0版本和项目的1.1.0之间的差异,然后将这些差异合并到我的项目的修改版本中。”

    对于大多数文件,合并将变得顺畅无阻。对于您和社区同时进行修改的其他人,SVN将提示冲突。除非您对真的做了进行了很大的更改,否则应该不难合并这些冲突。我建议为“推迟冲突解决”选择“ p ”,并使用TortoiseSVN解决它们。这样做很容易。

    解决所有冲突后,请继续测试该应用程序。如果一切都按预期进行,请继续并对您的工作副本进行svn commit

    ...您就完成了!

    关于此主题的更多引用资料:
  • Updating Drupal using SVN Vendor Branches
  • 关于svn - 有没有一种方法可以将我的代码 'patch'到开放源代码中,所以随着开放源代码项目的改进,我的更改将在本地进行处理吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2072073/

    10-12 12:43
    查看更多