在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是相对的,因此映射的路径将被视为相对路径,无论它是否相同?
答案 0 :(得分:3)
子库存逻辑已更改between 1.9 and 2.0。现在的程序是:
.hgsub
中的路径是相对的,则将其与主存储库路径在此更改之前,我们会:
.hgsub
所以你是对的,MYREPOS/lib
在第一步被视为相对路径。因此,子存储库的完整路径是
https://server/repos/main/MYREPOS/lib
并且您的重新映射模式仍会触发。这解释了为什么您在推送网址中间看到http://...
的原因。但是,有一个后备将恢复旧行为。如果您的模式是
^MYREPOS/(.*) = https://server/repos/\1
然后它不会匹配新步骤2中的任何内容 - 它只会在路径的开头重新映射MYREPOS
。我们注意到这一点并使用旧算法!