git SHA1 0000000000000000000000000000000000000000 (все нули), это нормально?

У меня есть еще незафиксированная ветка в git с SHA1 0000000000000000000000000000000000000000 (все нули), это нормально или я испортил репозиторий git?

Пожалуйста, не отвечайте да, есть вероятность 1 из 2^160 или 0,00000000000000000000000000000000000000000000000000000000006842277657836021%, чтобы иметь этот SHA1.

Я достаточно безопасен, я не тот счастливчик, который получил SHA1 0000000000000000000000000000000000000000 в своем git-хранилище.

2 ответа

Решение

Фиксация включает, помимо прочих метаданных, дату фиксации. Таким образом, хеш коммита не может быть отображен, пока коммит не будет фактически создан. То, что вы видите, это не коммит SHA, это просто значение по умолчанию, используемое в пользовательском интерфейсе.

Обратите внимание, что вы можете найти "все нули SHA1" вплоть до фиксации f65fdf (30 июня 2005, v0.99 из git)

Линус Торвальдс:

"Старый ref" со всеми нулями считается "безразличным" ref и позволяет нам сказать "написать новый ref независимо от того, что содержал старый ref (или даже если он вообще существовал)".

Это позволяет (если это делает git-send-pack) создавать новые ссылки и исправлять старые.


Как SzG упомянул в комментариях, это тот тип SHA1, который вы найдете в перехватах Git receive/update и новых ветвях, представляющих "old-ref" для несуществующего объекта (в то время как "new-ref" создаст указанный объект как ветка).

Другие вопросы по тегам