
Пожалуйста, объясните мне, SHA, который создается при создании объекта коммита, является либо SHA только содержимого файла, либо в функцию HASH входят и другие входные данные, такие как автор коммита, временная метка, дата и т. д.?
У меня в голове возникла следующая путаница:
commit object's index=SHA(Contents of file)?
OR
commit object's index=SHA(Contents of file+author of commit+date of the day+time of the day)?
решение1
Коммит git
никогда не существует из чистого содержимого файла, поэтому ваше первое предположение (SHA(содержимое файла)) никогда не является верным. На самом деле, каждыйфайлвы регистрируетесь, сохраняется как объект иэтотИмя объекта — это SHA-сумма файла.
Но вы даже не просто регистрируете файлы, речь идет о файлеиерархия. Иерархия файлов напоминаетдерево-объект, который содержит все файлы в этой (под-)иерархии (отмеченные по имени объекта — SHA-сумме), имя и разрешения файлов. Имя объекта файла-дерева — это SHA-сумма по этому списку. Это также работает рекурсивно, т. е. вы можете ссылаться на объекты-дерева из объектов-дерева (так работают подкаталоги).
Ваш фактическийсовершитьсостоит из SHA-сумм (0 или более) родительских коммитов, имени объекта дерева, похожего на корневой каталог вашего репозитория, даты коммита, автора коммита, сообщения коммита и т. д. Имя коммита («номер ревизии») представляет собой SHA-суммуэтотлистинг.