在Mercurial存储库中,如何在汞更新期间设置git subrepos的原始路径?

时间:2018-12-13 18:18:58

标签: mercurial tortoisehg

我有一个Mercurial存储库,在多台计算机上都有一个克隆。特别是,我有一台Ubuntu计算机,其中的存储库位于〜/ .vim中,以及一台Windows计算机,其相关存储库位于C:\ Users \ ben \ vimfiles中。

此存储库包含子存储库,其中一些是git子存储库。例如,来自.hgsub:

pack/thirdparty/start/signify           = [git]pack/thirdparty/start/signify

我想合并每个存储库中所做的更改。因此,我将存储库从Ubuntu计算机克隆到USB记忆棒,将其插入Windows计算机,然后从Windows计算机上的存储库拉入USB记忆棒的克隆。到目前为止,一切都很好。

现在,我要进行合并,甚至只是更新到Windows计算机提供的任何版本。我收到这样的错误:

pulling subrepo pack/thirdparty/start/signify from /home/ben/.vim/pack

/thirdparty/start/signify
fatal: 'C:/Program Files/Git/home/ben/.vim/pack/thirdparty/start/signify' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
abort: git fetch error 128 in pack/thirdparty/start/signify (in subrepo pack/thirdparty/start/signify)
[command returned code 255 Thu Dec 13 11:24:15 2018]

经过一番挖掘,我最终通过手动编辑每个git subrepo中的.git / config文件解决了该问题,将原始路径从/home/ben/.vim更改为C :/ Users / ben / vimfiles。

仅使用Mercurial命令或配置执行此操作的正确方法是什么?使用TortoiseHg,当我更新(但不合并!)时,我可以选择任何保存的路径以从中提取子仓库。这似乎手动覆盖了pull.path的默认配置。但是,git subrepos似乎忽略了该设置。

1 个答案:

答案 0 :(得分:1)

从Mercurial的documentation on subrepositories(通过hg help subrepos在命令行中访问):

  

子存储库

     

...

     

重新映射子存储库源

     

子存储库源位置可能会在项目生命周期中发生变化,   使父存储库历史记录中存储的引用无效。至   解决此问题,可以在父存储库hgrc中定义重写规则   文件或Mercurial配置。请参阅中的[subpaths]部分   hgrc(5)以获得更多详细信息。

subpaths上的文档:

  

子路径

     

如果远程服务器更改名称,则子存储库源URL可能会过时   或暂时不可用。本部分允许您定义   重写以下形式的规则:

<pattern> = <replacement>
     

其中pattern是与子存储库源匹配的正则表达式   URL和替换是用于重写它的替换字符串。   组可以在模式上匹配,并在替换中引用。对于   实例:

http://server/(.*)-hg/ = http://hg.server/\1/
     

http://server/foo-hg/重写为http://hg.server/foo/

     

首先将相对子存储库路径设为绝对路径,然后重写   然后将规则应用于完整(绝对)路径。如果图案不   匹配完整路径,尝试将其应用于相对路径   单独的路径。规则按定义顺序应用。