推送时,包含绝对路径的 Mercurial [子路径] 将附加到主存储库的默认路径



在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 subrepolib to https://server/repos/main/http%3A//server/repos/lib

我本以为:

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

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

子假设逻辑在1.9和2.0之间发生了更改。现在的程序是:

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

在此更改之前,我们将:

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

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

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

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

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

则它不会匹配新步骤2中的任何内容——它将仅在路径的开头重新映射CCD_ 5。我们注意到了这一点,并使用旧算法!

最新更新