如何检查某些 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 因为我需要一个脚本,它只需要做一些检查而不改变状态。 在这种情况下,克隆存储库,拉取并删除克隆。但请注意,没有-uhg 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 遥控器上是不是存在特定版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何自动删除 Mercurial 工作树中的所有 .orig 文件?

如何检查用户是不是具有特定角色并因此允许某些操作?

检查某些字符串是不是在页面上

Mercurial:在一个仓库中的分支之间合并一个文件

如何检查TFS服务器上是否有新的更改?

我的 mercurial 存储库太大,我需要删除旧的提交。是不是可以?