Может ли история с мерзавцами быть сфальсифицирована?
Мошенническая история может быть сфальсифицирована?
Я думаю, например, о следующей информации:
- Дата фиксации
- Зафиксировать контент
- Личность коммитера
Если да:
- Есть ли способы аутентифицировать контент 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 (намеренно или нет) не перезаписывает историю.