Может ли история с мерзавцами быть сфальсифицирована?

Мошенническая история может быть сфальсифицирована?

Я думаю, например, о следующей информации:

  • Дата фиксации
  • Зафиксировать контент
  • Личность коммитера

Если да:

  • Есть ли способы аутентифицировать контент git-репо или сделать его аутентифицированным?
  • Как узнать, была ли изменена история git?

3 ответа

Решение

Все поля, которые вы упомянули, являются частью SHA-1, который используется для идентификации фиксации. Таким образом, невозможно изменить эти поля без создания нового коммита. А новый коммит означает, что нет git Реализация примет переписанный коммит в качестве замены оригинального, если вы не заставите его.

Как правило, когда у вас есть git commit ID, который является криптографическим хешем всей истории разработки до этого момента, и всей авторской информации, которая включает. Любое изменение этих данных будет обнаружено.

Если вам нужна дополнительная безопасность, вы можете выйти из коммитов с помощью ключей PGP, используя git commit -S,

Вы можете относительно легко изменить детали коммита: Как добавить измененный файл в более старый (не последний) коммит в Git

Однако, поскольку хэш SHA-1 каждого коммита включает в себя хэш родительского коммита, это меняет хэши всех последующих коммитов.

Есть ли способы аутентифицировать контент git-репо или сделать его аутентифицированным?

Вы можете подписывать коммиты, используя GPG, но это только идентифицирует автора. Если у автора есть злые намерения, это подводит нас ко второму вопросу:

Как узнать, была ли изменена история git?

Это зависит от того, как вы определяете "модифицированный". Насколько я знаю, истории о том, что master в прошлом, так что вы не можете легко различить обычную ветку и "измененную" историю. Вы могли бы проверить rev-log за все, что выглядит странно.

Все истории систем контроля версий (clearcase, subversion, CVS, git) могут быть изменены, если у вас есть доступ к истории. Git распространяется, у вас есть копия (т.е. форк) всей истории. Вы можете изменить историю (см. @Mrks ^ 1 answer) только своего собственного форка.

Если вы хотите распространить свою копию, перенести изменения на другую ветвь с помощью --force таким образом, вы можете перезаписать целевую историю:

  • только если у вас есть доступ на запись к целевой удаленной вилке
  • только если удаленная ветка не установлена ​​как только для чтения
  • Любой существующий форк (кроме вашего текущего) заметит перезаписанную историю и спросит вас, что делать (т.е. объединить).

Обычно это делается в организациях, чтобы другие пользователи не перезаписывали историю. И, как правило, только ветвь, связанная с основным путем истории производства (например, отрасль = продукт, производство, мастер и т. Д.) Это будет частью определения рабочего процесса.

Многие организации ^2, имеющие зеркала github, имеют эту настройку, например, чтобы убедиться, что сам Github (намеренно или нет) не перезаписывает историю.

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