如果一个简写提交ID可以引用2个不同的提交,Git会警告我吗?
如果cee157
可以引用2个不同的提交ID,例如
cee157eb799af829a9a0c42c0915f55cd29818d4
和cee1577fecf6fc5369a80bd6e926ac5f864a754b
将Git警告我,如果我inputgit log cee157
? (或者Git 1.8.5.2(Apple Git-48)允许我inputgit log cee1
)。
我认为它应该,虽然我找不到任何权威来源,说它会。
它应该给你这样的东西:
$ git log cee157 error: short SHA1 cee157 is ambiguous. error: short SHA1 cee157 is ambiguous. fatal: ambiguous argument 'cee157': unknown revision or path not in the working tree. Use '--' to separate paths from revisions, like this: 'git <command> [<revision>...] -- [<file>...]'
我只是在一个真正的Git仓库上testing了这个,通过find这样的重复前缀的提交:
git rev-list master | cut -c-4 | sort | uniq -c | sort -nr | head
这取得master
版本的修改列表,删除前4个字符并丢弃其余部分,重复计数并按数字sorting。 在我相对较小的约1500个提交库中,我发现了一些常见的4位数前缀的修订。 我select了一个4位数的前缀,因为这似乎是Git支持的最短法定长度。 (即使不明确,也不能使用3位或更less的数字。)
顺便说一句,这不是一个错字,不知道为什么有关不明确的SHA1错误消息出现两次,无论重复SHA1的数量(尝试2和3):
error: short SHA1 cee157 is ambiguous. error: short SHA1 cee157 is ambiguous.
(两者都在stderr
,实际上整个输出都是stderr
, stdout
没有任何东西)
在Windows中testing:
$ git --version git version 1.8.1.msysgit.1
我认为可以肯定地说,如果你的版本是> = 1.8.1,Git 会警告你重复。 (它会拒绝重复操作。)我猜想,旧版本也是这样工作的。
UPDATE
在testing时,由于environment.c中的int minimum_abbrev = 4
,所以至less需要4位SHA1。 (感谢@devnull指出了!)
原始的海报说:
我认为它应该,虽然我找不到任何权威来源,说它会。
权威来源可以在源代码 get_short_sha1()
。
引用这个 :
if (!quietly && (status == SHORT_NAME_AMBIGUOUS)) return error("short SHA1 %.*s is ambiguous.", len, hex_pfx);
这个 :
if (!ds->candidate_checked) /* * If this is the only candidate, there is no point * calling the disambiguation hint callback. * * On the other hand, if the current candidate * replaced an earlier candidate that did _not_ pass * the disambiguation hint callback, then we do have * more than one objects that match the short name * given, so we should make sure this one matches; * otherwise, if we discovered this one and the one * that we previously discarded in the reverse order, * we would end up showing different results in the * same repository! */ ds->candidate_ok = (!ds->disambiguate_fn_used || ds->fn(ds->candidate, ds->cb_data)); if (!ds->candidate_ok) return SHORT_NAME_AMBIGUOUS;
此外, testing也存在以确保该function按预期工作。