Mercurial如何用一条命令拉取所有远程路径?求git fetch --all等效命令
在Mercurial里,确实没有像Git的git fetch --all那样的内置一键命令,但我们可以通过几种简单的方式实现从所有远程仓库拉取新变更集的效果,刚好适配你有三个远程的场景:
方法1:用Shell循环直接执行
如果你用的是类Unix系统(Linux/macOS)的bash/zsh,可以直接在终端运行这条命令,它会遍历所有远程并逐个拉取:
for remote in $(hg paths | cut -d'=' -f1); do hg pull "$remote"; done
原理很简单:hg paths会输出所有远程的名称和路径(格式是远程名 = 路径),cut -d'=' -f1用来提取每个行里的远程名称,然后循环对每个远程执行hg pull。
方法2:创建Mercurial别名(推荐)
为了不用每次都敲长命令,你可以给这个操作创建一个自定义别名,以后直接用hg pullall就能执行。
打开你的全局配置文件~/.hgrc(或者仓库本地的.hg/hgrc,只针对当前仓库生效),在[alias]区块里添加:
[alias] pullall = !for remote in $(hg paths | cut -d'=' -f1); do hg pull "$remote"; done
保存后,下次直接输入hg pullall,就会自动遍历所有远程拉取变更集了。
方法3:Windows环境下的适配
如果你用的是Windows的PowerShell,可以用这条命令:
hg paths | ForEach-Object { $remote = ($_ -split '=')[0].Trim(); hg pull $remote }
如果是CMD的话,命令会繁琐很多,更推荐用PowerShell或者上面的别名方式。
另外要注意:和git fetch --all一样,这些操作只是把远程的新变更集同步到本地仓库,不会自动合并到你当前的工作分支——这和Mercurial默认的hg pull行为是一致的,合并还需要你手动执行hg merge。
内容的提问来源于stack exchange,提问作者Evan
相关产品推荐
相关产品推荐

