我有一个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似乎忽略了该设置。
答案 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/
。首先将相对子存储库路径设为绝对路径,然后重写 然后将规则应用于完整(绝对)路径。如果图案不 匹配完整路径,尝试将其应用于相对路径 单独的路径。规则按定义顺序应用。