在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之间发生了更改。现在的程序是:
- 如果
.hgsub
中的路径是相对路径,则将其与主存储库路径连接 - 将重新映射规则应用于该最终路径
在此更改之前,我们将:
- 将重新映射规则应用于来自
.hgsub
的路径 - 如果重新映射的路径是相对路径,则将其与主存储库路径连接
所以你说得对,MYREPOS/lib
在第一步中被视为一个相对路径。因此,子存款的完整路径是
https://server/repos/main/MYREPOS/lib
你的重新映射模式仍然会触发。这就解释了为什么您会在推送URL的中间看到http://...
。但是,有一个回退将恢复到旧行为。如果你的模式是
^MYREPOS/(.*) = https://server/repos/1
则它不会匹配新步骤2中的任何内容——它将仅在路径的开头重新映射CCD_ 5。我们注意到了这一点,并使用旧算法!