3

在 Windows 上运行 Mercurial 2.0.2:

在我的 .hgrc 中:

[subpaths]
MYREPOS/(.*) = https://server/repos/\1

在我的 .hgsub 中:

subrepo/lib = MYREPOS/lib

当我进行推送时,子仓库的推送路径是它到主仓库的路径的串联,而不是绝对路径 - 输出为:

pushing to https://server/repos/main 
pushing subrepo subrepo\lib to https://server/repos/main/http%3A//server/repos/lib

我本来期望:

pushing to https://server/repos/main
pushing subrepo subrepo\lib to https://server/repos/lib

是因为子回购路径的“绝对性或相对性”是由 .hgsub 中的右手路径决定的,而不是它映射到的值?例如,MYREPOS/lib 是相对的,因此映射的路径将被视为相对,不管是不是?

4

1 回答 1

3

子存储库逻辑在 1.9 和 2.0 之间更改。现在的程序是:

  1. 如果路径.hgsub是相对的,则将其与主存储库路径连接
  2. 将重新映射规则应用于此最终路径

在此更改之前,我们将:

  1. 将重映射规则应用于路径.hgsub
  2. 如果重新映射的路径是相对的,则将其与主存储库路径连接

所以你是对的,MYREPOS/lib在第一步中被视为相对路径。因此,子存储库的完整路径是

https://server/repos/main/MYREPOS/lib

并且您的重新映射模式仍然会触发。这解释了为什么您http://...会在推送 URL 的中间看到。但是,有一个回退可以恢复到旧的行为。如果你的模式是

^MYREPOS/(.*) = https://server/repos/\1

那么它不会匹配新步骤 2 中的任何内容——它只会MYREPOS在路径的开头重新映射。我们注意到这一点并使用旧算法!

于 2012-01-27T13:01:40.430 回答