【发布时间】:2021-02-02 09:41:01
【问题描述】:
在 Git SCM 中,我使用以下命令来检查某个远程是否存在特定修订:
git fetch <remote> <revision> -q --dry-run
如果命令的退出代码为零,则表示远程版本存在。
对于 Mercurial,我尝试了以下命令:
hg pull <remote> -r <revision> -q
它可以工作,但问题是它实际上会提取远程版本,而不是本地版本。是否有与 Git 的 --dry-run 选项等效的选项,或者在 Mercurial 中执行此操作的其他方式,它不执行指定修订的拉取,但仅检查它是否存在于远程?
【问题讨论】:
-
您可以编写一个在拉取期间拒绝交易的 mercurial 钩子,但我相信这也会弄乱退出状态(尽管我实际上对此不确定)。但为什么这很重要?为什么不允许修订进入本地仓库?
-
@torek 因为我需要一个脚本,它只需要做一些检查而不改变状态。
-
在这种情况下,克隆存储库,拉取并删除克隆。但请注意,没有
-u的hg pull根本不会触及工作树,只会触及存储库本身。 -
是的,它非常低效,即使使用本地克隆硬链接方法也是如此。如果您追求效率,请考虑只检查提交的哈希 ID:fetch 通过比较哈希 ID 来工作。
-
这就是
hg pull正在做的事情,真的:它调用另一个 Mercurial 存储库,并且该存储库列出了您在hg log中看到的哈希 ID,其格式仅打印完整的哈希 ID。当地的 Mercurial 和另一个相反:我没有那个,发送它或 我有那个,不需要发送它(也不是它的任何祖先,因为有那个暗示我也有它的所有祖先)。此对话的结果决定了 Mercurial 带来了哪些修订。 Git 做同样的事情:它的协议有点不同,但两个 Git 交换哈希 ID。
标签: git shell version-control mercurial