git commit --author не требует пароля?

Моя ситуация следующая: есть 2 человека, которые имеют доступ к приватному репо и вместе работают над кодом. Но один парень написал код на компьютере другого парня и теперь хочет совершить коммит от своего имени, а не от имени того другого парня.

Я видел здесь, как зафиксировать другой автор репозитория. Я сделал это, но странно, что для этого не требовался пароль автора, от имени которого я совершал действия. Это ненормально. Чтобы люди могли коммитить для себя код, который я не писал и за который не несу ответственности?


person Narek    schedule 17.03.2015    source источник
comment
git удостоверения не имеют паролей - они просто настроены в вашем файле .gitconfig.   -  person sevenseacat    schedule 17.03.2015
comment
Когда вы клонируете репо, вам нужен пароль, верно? Даже я помню, что в Windows для каждого коммита Tortoise Git требовал пароль. Почему тогда я должен иметь возможность совершать действия для другого человека без пароля.   -  person Narek    schedule 17.03.2015
comment
Потому что так работает Git. Ваш хост-сервер Git (на который вы в конечном итоге отправляете свои коммиты) может не позволить вам выдавать себя за других пользователей, но самому Git все равно.   -  person Magnus Bäck    schedule 17.03.2015
comment
Так что любой может зафиксировать для меня, если у него есть клон репо? :)   -  person Narek    schedule 17.03.2015
comment
да. Но, как я уже сказал, они могут не иметь возможности публиковать коммиты.   -  person Magnus Bäck    schedule 17.03.2015
comment
@MagnusBäck, что вы имеете в виду, что они не смогут опубликовать коммиты? Что означает публикация в вашем контексте?   -  person Narek    schedule 17.03.2015
comment
Под публикацией я подразумеваю отправку в другой репозиторий. Вы можете делать все, что хотите, в своем локальном репозитории, но если вы хотите отправить свои коммиты в чужой репозиторий, вы должны соблюдать их правила, которые могут включать ограничения для авторов и/или коммиттеров коммитов, которые вы отправляете.   -  person Magnus Bäck    schedule 17.03.2015


Ответы (2)


Git не обрабатывает никакой авторизации. Как это работает, вы можете просто изменить свою личность, используя аргумент git config или --author, чтобы делать коммиты от имени того, кого вы хотите. Эти коммиты останутся локальными на вашем компьютере, пока вы не решите их отправить.

Удаленные серверы часто выбирают какую-либо аутентификацию. Чаще всего это делается с использованием протокола SSH. Кроме того, многие добавляют уровень авторизации, который ограничивает доступ к репозиториям. Например, на GitHub вы можете отправлять только те репозитории, которыми владеете или к которым у вас есть явный доступ для записи.

Однако этот контроль доступа применяется только к акту отправки изменений. Поэтому, если у вас есть доступ к репозиторию, вы можете отправлять любые коммиты, какие хотите, с любым автором, которого хотите. Возможно, что провайдеры добавляют проверку, которая отклоняет отправку, если они содержат фиксации, которые не были созданы (или зафиксированы) отправляющим пользователем. Однако такое поведение обычно нежелательно.

Причина этого в том, что Git — это распределенная система контроля версий. Таким образом, в отличие, например, от Subversion, людям не нужно использовать один и тот же централизованный сервер, который затем может гарантировать, что вы публикуете только изменения, сделанные вами (Subversion фактически просто предполагает это, а «коммиты» создаются только на сервере). Вместо этого возможно — и часто желательно — чтобы коммиты шли разными путями, пока не попадут в центральные репозитории (несколько репозиториев также распространены). Вы даже можете работать напрямую с другим разработчиком и вносить изменения в их частный репозиторий или извлекать их из него, даже не взаимодействуя с каким-либо центральным сервером. И когда вы затем решите опубликовать коммиты на центральном сервере, конечно, этот центральный сервер не должен отклонять ваши изменения только потому, что вы включили коммиты этого другого разработчика.

Так что нет никакой гарантии, что кто-то другой не использует вашу «личность» для создания коммитов от вашего имени. Однако Git поддерживает подписание коммитов, чтобы позволить вам доказать, что коммит принадлежит вам. Любой, кто затем заинтересован в его проверке, может затем проверить подпись в фиксации и убедиться, что она действительно была сделана вами. Некоторые серверы репозиториев могут даже потребовать, чтобы все коммиты, отправляемые на сервер, были подписаны, а затем проверять подпись для каждого коммита. Но это совершенно необязательно, а не то, что поставляется с Git по умолчанию; потому что по умолчанию Git — это просто "глупый трекер контента".

person poke    schedule 17.03.2015

да. С помощью git вы можете совершать коммиты под любым именем. Но вы можете использовать gpg-знак, чтобы гарантировать, что этот коммит будет вашим в будущем:

1. Создайте ключ:

~$ gpg --gen-key

2. Добавьте в .gitconfig ключ, который вы хотите использовать:

[user]
    ....
    signingkey = E4634C2C

3. Сделайте подписанную фиксацию:

~$ git commit -s -m "Signed commit"

Но есть некоторые минусы:

  1. Перед фиксацией необходимо ввести pass.
  2. Вам нужен секретный gpg-ключ на текущем локальном хосте.
person Alexander Yancharuk    schedule 17.03.2015