Учитывая имя пути в репозитории и, необязательно, спецификатор фиксации, вы можете проверить Git's уникальный идентификатор содержимого файла:
$ git hash-object -t blob Makefile
5a969f5830a4105d3e3e6236eaa51e19880cc873
$ git rev-parse :Makefile
5a969f5830a4105d3e3e6236eaa51e19880cc873
$ git rev-parse HEAD:Makefile
5a969f5830a4105d3e3e6236eaa51e19880cc873
(Эти три копии файлавсе они идентичны, в данном случае Makefile
находится в рабочем дереве, :Makefile
находится в индексе, а HEAD:Makefile
находится в текущем коммите.)
$ git rev-parse v2.1.0:Makefile
2320de592e6dbc545866e6bfef09a05f660c2c14
(ВерсияMakefile
совершено в коммите v2.1.0
не совпадает с тремя выше.)
Обратите внимание, что хотя Git по-прежнему использует SHA-1, это не то же самое, что SHA-1 фактического содержимого файла:
$ sha1sum Makefile
857f75d0f314501dfdfcc5b6a4306eba1faddd31 Makefile
$ python
[python startup messages]
>>> import hashlib
>>> hashlib.sha1(open('Makefile', 'rb').read()).hexdigest()
'857f75d0f314501dfdfcc5b6a4306eba1faddd31'
Это потому, что Git проверяет контрольную сумму данных после привязки к заголовку:
>>> data = open('Makefile', 'rb').read()
>>> hashlib.sha1('blob {}\0'.format(len(data)).encode('ascii') + data).hexdigest()
'5a969f5830a4105d3e3e6236eaa51e19880cc873'
Обратите внимание, однако, что если вы добавляете заголовок к файл, а затем контрольную сумму полученного файла, вы получите новую и другую контрольную сумму , потому что теперь вы проверяете контрольную сумму заголовка плюс данные файла.Если вы сохраните новую контрольную сумму в файле и получите контрольную сумму результата, вы получите еще третью контрольную сумму.Чтобы избежать этой проблемы постоянно меняющихся контрольных сумм, вам нужна либо более слабая контрольная сумма - та, где вы можете вычислить правильный ввод для получения желаемого результата (например, контрольная сумма стиля заголовка IP) - или для контрольной суммы данных , исключая контрольную суммусам .Или, конечно, вы можете хранить контрольную сумму вне файла , как это делает Git.
Если у вас есть другой источник уникальных идентификаторов, вы можете просто сгенерировать их, а не связать ихк содержанию файла.Как это сделать, решать только вам.