Git Log History - PullRequest
       49

Git Log History

6 голосов
/ 22 апреля 2011

Одна вещь, которая важна для контроля версий, это знание того, кто что сделал. Если что-то изменилось, и я понятия не имел, почему это было сделано, я бы посмотрел историю и спросил человека, который сделал это изменение. Поскольку я изучаю git, одна вещь, которая меня немного волнует, - это то, что ее очень легко подделать. Что мешает мне поместить имя / адрес электронной почты коллег в глобальный конфиг git для user.name и user.email? При использовании чего-то вроде gitosis / gitolite (который определил пользователей) или github (который я предполагаю, используя что-то вроде gitosis / gitolite), есть ли какой-нибудь способ узнать, кто действительно сделал коммит?

Ответы [ 3 ]

5 голосов
/ 23 апреля 2011

Журналы Gitolite (в .gitolite/logs/gitolite-*) пользователя Gitolite для каждого нажатия.Есть немного больше работы, чтобы определить толчок, который ввел конкретный коммит, но он должен быть прямым (один из способов: бросать легкие теги на кончике каждого толчка, затем использовать git name-rev, чтобы найти первый тег послеcommit).

Большинство пользователей Gitolite, вероятно, имеют только один связанный ключ SSH (keydir/user.pub), но у одного пользователя может быть несколько ключей SSH (keydir/user@*.pub).

Таким образом, для основанного на SSH Gitolite вы можете сопоставить каждый коммит с одним (или несколькими) ключами SSH.

Другой вопрос (доверяете ли вы ключу SSH для точной идентификации конкретного человека)Доверяете ли вы пользователям, чтобы их личные SSH-ключи были защищены?).

Gitolite также может ограничивать доступ к Git через «умный HTTP».В этом случае веб-сервер предоставляет имя пользователя Gitolite в переменной среды REMOTE_USER (т. Е. Вместо использования файла .ssh/authorized_keys для идентификации пользователя на основе ключа SSH).Идентификация и аутентификация полностью зависит от самого веб-сервера (обычно это просто имя пользователя и пароль, но SSL-сертификаты для каждого пользователя могут использоваться для чего-то более похожего на доступ по SSH).

Итак, для HTTPGitolite на основе, вы можете сопоставить каждый коммит с аутентификацией, выполняемой веб-сервером.


GitHub имеет некоторую похожую информацию, которую можно запросить через Events часть GitHub API (ранее он, казалось, был доступен только как часть «новостной ленты» для ваших просмотренных репозиториев).Каждый PushEvent идентифицирует пользователя GitHub, который выполнил push, имя ref (ветви) было обновлено, имя (хэш SHA1) нового ref «head» (новый совет обновленной ветви)и список коммитов.

1 голос
/ 23 апреля 2011

Это не форум по этике или философии, афаик; НО

git позволяет подписывать коммиты и подписанные теги.Это должно помочь вам накормить вашу паранойю:)

0 голосов
/ 22 апреля 2011

Вы можете сделать так, чтобы все подписывали коммиты с GPG: см. Этот урок .

В этом уроке парольная фраза GPG установлена ​​в git config, что мне кажется бессмысленным,хотите, чтобы ловушка подсказывала пользователю при каждом коммите.

Конечно, если вы не менеджер, предложение, чтобы каждый подписывал свои коммиты, может быть дипломатически жестким, поэтому будьте осторожны.

РЕДАКТИРОВАТЬ: Как указывает Брайан, это только подписывает сообщение фиксации, так что это не хорошее решение .Я сохраняю ответ, так как он может помочь понять проблему.

...