【问题标题】:How can I branch in SVN and have it branch my svn:external folders as well?如何在 SVN 中分支并让它分支我的 svn:external 文件夹?
【发布时间】:2010-09-19 17:00:27
【问题描述】:

我在 Windows 中使用 tortoise svn。

我如何在 SVN 中分支并让它也分支我的 svn:external 文件夹?

【问题讨论】:

标签: svn tortoisesvn branch


【解决方案1】:

您应该使用svn:externals 作为来自不同存储库的外部 引用。所以svn:externals 应该是指组件、模块、3rd 方工具等。

您应该使用svn:externals 来模拟“符号链接”行为,方法是使用外部指向同一个存储库。 大多数情况下,您可以通过修改构建结构或使用签出脚本和稀疏签出功能来解决此类问题。

svn:externals 有很多问题,大部分都很难看到、跟踪和修复: see an example here

  • 提交不能跨越外部(无原子提交)
  • 分支不会分支它们的外部(正如您所指出的)
  • 标签不会“冻结”它们的外部,因此后面的构建可能会导致不同/损坏的构建
  • merging 和 reintegrate merge 不适用于外部

如果你使用 externals 来指向其他仓库,你大部分时间不会有这些问题。

【讨论】:

  • 问题在于,在某些情况下,您实际上需要对同一个 repo 进行外部访问,尤其是当系统需要动态组件并且构建工具会过度使用时。对于大型项目,我已经在这类场景中运行了几次以上。
  • 一个可能值得研究的解决方案是 GIT-SVN 设置。然后可能使用 git 进行克隆部分并仍然保留 SVN Externals。
【解决方案2】:

您必须在外部存储库中手动创建一个分支,然后更改您的 svn:external 属性以指向正确的分支。

【讨论】:

  • 这对我来说不可行,因为我的项目中有很多 svn:externals
  • 可行与否,这是唯一的解决方案。有人要求将其作为 SVN 本身的自动功能,但问题仍然存在,而且很老...subversion.tigris.org/issues/show_bug.cgi?id=1258
【解决方案3】:

当你在 Subversion 中创建一个分支时,你只是创建了一个廉价的主干、分支或标签副本。这个便宜的副本将包含与您分支的主干、分支或标签相同的所有文件和属性,直到您开始修改新分支的属性或文件。

但是,您可以修改“提交”挂钩之一,以便在提交分支后自动修改设置。 http://svnbook.red-bean.com/en/1.1/ch05s02.html

否则,如果您希望在分支上修改您的外部,则需要手动进行。

【讨论】:

  • 不建议通过钩子脚本修改 svn-commit 事务,并且 svn 社区不支持。这将导致严重的工作副本不同步!
【解决方案4】:

现在有相对的外部因素。虽然你应该知道:) 我现在正在使用它们——正在解决我遇到的一些麻烦,但我正在进步。 我只是在其中创建了相对外部后标记了一个项目。 现在它很奇怪 - 当我检查分支时,它通知我外部来自修订版“主干的最高修订版”,但外部本身是原始的 - 这就是我想要的 :)

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2011-05-23
  • 2021-01-14
  • 1970-01-01
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
相关资源
最近更新 更多