Если cee157
можно ссылаться на 2 разных идентификатора фиксации, например
cee157eb799af829a9a0c42c0915f55cd29818d4
и cee1577fecf6fc5369a80bd6e926ac5f864a754b
Git предупредит меня, если я введу код git log cee157
? (или Git 1.8.5.2 (Apple Git-48) позволяет мне вводить текст git log cee1
).
Я думаю, что должен, хотя я не могу найти ни одного авторитетного источника, который бы сказал, что это будет.
man gitrevisions
, что, по крайней мере, подразумевает, что будет выдано предупреждение, поскольку в нем говорится, что вы можете назвать ревизию ее полным именем SHA1-1 или «ведущей подстрокой, которая уникальна в репозитории».git log c
... и увидишь.git log abc
говорит, чтоfatal: ambiguous argument 'abc': unknown revision or path not in the working tree.
даже если у меня есть уникальный SHA1, начиная сabc
. Не работает с 1-2-3 цифрами, 4 вроде как минимум. Проверено в Windows (1.8.1) и Mac (1.9.1).minimum_abbrev
значение4
.Ответы:
Это должно дать вам что-то вроде этого:
Я только что протестировал это в реальном репозитории Git, найдя коммиты с повторяющимися префиксами, например:
Это берет список ревизий
master
, вырезает первые 4 символа и отбрасывает остальные, подсчитывает дубликаты и сортирует численно. В моем относительно небольшом репозитории ~ 1500 коммитов я нашел довольно много ревизий с общим 4-значным префиксом. Я выбрал 4-значный префикс, потому что это самая короткая допустимая длина, поддерживаемая Git. (Не работает с 3-мя и менее цифрами, даже если это не двусмысленно.)Кстати, это не была опечатка, я не знаю, почему сообщение об ошибке о неоднозначном SHA1 появляется дважды, независимо от количества дублированных SHA1 (пробовал с 2 и 3):
(Оба
stderr
включены. На самом деле весь выход включенstderr
, ничего не горитstdout
.)Проверено в Windows:
Я думаю, можно с уверенностью сказать, что если ваша версия> = 1.8.1, Git будет предупреждать вас о дубликатах. (Он откажется работать с дубликатами.) Я предполагаю, что более старые версии тоже работали таким образом.
ОБНОВИТЬ
При тестировании вам понадобится как минимум 4-значный SHA1 из-за
int minimum_abbrev = 4
in environment.c . (Спасибо @devnull за указание на это!)источник
Оригинальный плакат гласит:
Авторитетный источник можно найти в исходном коде,
get_short_sha1()
.Цитируя это :
и это :
Более того, существуют также тесты, чтобы убедиться, что функция работает должным образом.
источник