如何检查某些 Mercurial 遥控器上是不是存在特定版本?
Posted
技术标签:
【中文标题】如何检查某些 Mercurial 遥控器上是不是存在特定版本?【英文标题】:How to check whether specific revision is present on some Mercurial remote?如何检查某些 Mercurial 遥控器上是否存在特定版本? 【发布时间】: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。
【参考方案1】:
hg in -r REV
-r --rev REV [+] a remote changeset intended to be added
Returns 0 if there are incoming changes, 1 otherwise.
【讨论】:
以上是关于如何检查某些 Mercurial 遥控器上是不是存在特定版本?的主要内容,如果未能解决你的问题,请参考以下文章