首页 > 解决方案 > 有没有办法在提交自己的更改时自动更新外部 SVN 的 peg 修订?

问题描述

我正在使用 TortoiseSVN(版本 1.9.7)并且刚刚开始使用svn:externals. 我想用它在同一个存储库中的不同项目之间共享一些通用功能。所以回购布局将是这样的:

/projectA
/projectB
/projectC
/sharedLibs
/sharedLibs/lib1
/sharedLibs/lib2

然后我使用svn:externals,例如 on /projectA/lib,将一些共享库链接到当前项目。例如 ^/sharedLib/lib1.

按照文档中的建议,我使用明确的版本号(挂钩版本)。现在,我可以更改我的工作副本中的一些代码,/projectA/lib/lib1TortoiseSVN 允许我提交这些代码,/sharedLibs/lib1以使我的更改可用于所有项目。

但是,如果我想更新外部的/projectA/lib以指向我自己所做的更改,我必须再次提交以更改的svn:external属性/projectA/lib(使用 TortoiseSVN 的外部编辑对话框提供的“调整到 HEAD”选项) .

此过程是否有任何快捷方式,以便我每次更改外部内容(指向同一存储库中的另一个文件夹)时都不必进行额外的提交?

标签: svntortoisesvnsvn-externals

解决方案


在与 TortoiseSVN 一起玩svn:externals了一段时间之后,我的问题现在对我来说看起来有点傻......我将在这里陈述我目前的理解,因为它总是有一个(很小的)机会可以帮助某人。

基本上可以尝试(手动)将所有内容压缩到一个提交中,但这无法反映实际发生的情况,并且可能会使阅读提交日志的人感到困惑。

使用问题中的示例,会发生以下情况:

  1. 中的本地修改/projectA/lib/lib1将提交给/sharedLibs/lib1.
  2. 必须告知文件夹/projectA/lib获取/sharedLibs/lib1在步骤 1 中创建的 的新修订版。这是通过更新svn:externals文件夹的属性来完成的。

因此更改实际上发生在两个完全不同的地方,因此使用两次提交是有意义的。另一个原因是我们/projectA/lib/lib1指向. 在提交更改之前(在上面的步骤 1 中),我们无法知道这个新的修订号。我们可以尝试猜测新提交获得的修订号,但如果其他人在我们和操作之间提交任何内容,这可能会失败。/sharedLibs/lib1updatecommit


推荐阅读