Git 相当于 Mercurial 提示标签

Git equivalent of Mercurial tip tag

有什么方法可以引用存储库中最新的 git 提交(无论分支)?

我们正在从善变转向 git。我们的 CI 集成测试之一验证了对特定回购的最新提交。它使用 tip 标签来检索它(它使用 'tip.zip' 参考从 Bitbucket 云下载一个 .zip)。现在我想知道这是否可以在 git 中实现而无需同步 repo(测试使用 zip 下载而不是 checkout/sync 有内部原因)。

Mercurial 的提示 只是存储库中最后修改的头部。这是有效的,因为 Mercurial 在每次提交 进入 存储库时对其进行编号。此数字在存储库的任何 clone 中都没有用,因为相同的提交可能在克隆中但可能以不同的顺序到达,或者在其他提交之后到达在另一个存储库中(不在这个存储库中)进入。1

在 Mercurial 存储库中采用最近合并的,因此在数字上最后的提交不是一个好的工作方式,因为刚刚进入的提交可能位于某种测试或备份分支上与人们正在做的实际工作无关。相反,您应该进行 specific 最新提交——最新提议的发布中包含,或最新开发,或其他任何内容。2(您可以在 Mercurial 和 Git 中轻松获得它。)

无论如何,Git根本没有"latest in repository"的概念。 Git 中的每个 分支名称 都定义了该 分支 中的最新提交,因此 "tip of develop" 或 "tip of master" 或什么都只是 "the commit identified by that name"。是否以及如何下载这些提交的 zip 文件取决于您的托管服务提供商,但是 git archive 使这变得简单,因此您很可能可以轻松地 正确地 事物。甚至不要尝试做 错误的 事情,Git 没有提供。


1请注意,任何其他克隆中的 name tip 将命名为 its 编号最高的修订版。如果相同的变更集同时进入两个存储库,它们可能具有不同的本地编号,但最后一个将具有最高的本地编号。那么,在这种特殊情况下,每个存储库中的 tip 将命名相同的变更集。

另见 the Mercurial FAQ, under the definitions of "head" and "tip"。请注意每个变更集如何有两个数字:一个本地的、简单的递增计数和一个哈希 ID:0:838e1:3fe42:4563,等等。 Git 有哈希 ID,但不是本地有用的、递增的和易于使用的数字。 Git 因此强制您使用原始哈希 ID 或分支名称。

(我不确定 tip 如何使用 Hg Evolve 扩展。我想它仍然只是指最高的本地修订号,因为你会通过插入一个新的头来淘汰旧的头。这将保持 属性 Mercurial tip 始终是一个头,尽管并非所有 Mercurial 头都是 tip——只有一个头可以是 tip。)

2您还 运行 其他人在您不注意时向存储库提交新提交的风险,因此 tip 分支名称指的是比您预期的更新的提交。理想情况下,您需要一个唯一的 unchanging 标识符来提交。那将是它的哈希 ID。您可以在两个 VCS 中使用哈希 ID,但哈希 ID 至少是令人讨厌的。名称的便利性可能会抵消这种风险。

是的,你(可能)可以。根据这个比较老的answer,可以用(TBT!,我没有Git,无法测试结果):

git log -1 --all --date-order

(其中 -1 是变更集的数量,--all 对于 "from all branches" 和 --date-order 根据日期对提交进行排序)

是的,有多种方法可以获取最新的提交。

蛮力方法很简单 :/,它查看所有 refs 并选择最近的一个,其提交消息与 / 之后的正则表达式匹配,这里是空的,一个简单的匹配.例如尝试 git show :/

如果您有一组感兴趣的候选项,基于 rev 列表的命令的默认顺序是提交日期顺序,例如

git rev-list -1 --no-walk master maint make

将只显示三个命名提交中的最新提交。

但是你为什么要关心日期呢?难道你不想 ci 任何你还没有 ci 的东西吗?祖先结构很重要。 Git 知道同时性是 dvcs 中的一个问题,就像它在物理学中一样,如果你想知道哪个先发生,你可能必须关心是谁在问,为什么。 j

it downloads a .zip from Bitbucket cloud using the 'tip.zip' reference). Now I'm wondering if this is achievable in git without need to sync the repo (there are internal reasons why the test uses zip download instead of checkout/sync

但这让我觉得你正试图强迫 Git 穿上 Mercurial 的紧身衣。 git fetch 可以是 asked/configured 以仅获取您想要的内容,git fetch origin +master:refs/remotes/origin/master 将仅获取对主提示的更新,并且它会将其删除。