#git
Вопрос:
Вот сценарий: на ПК с Windows запущено тестовое программное обеспечение, автоматизирующее аппаратные тесты. Код для управления тестами управляется в репозитории Git. Существует единый общий логин с паролем, известным всем операторам тестирования.
Как мне настроить его так, чтобы, когда пользователь хочет совершить коммит, он запрашивал у него имя пользователя и адрес электронной почты, или они могли предоставить его для каждой фиксации? Нам нужно отследить, кто из людей внес изменения. Иногда необходимы горячие изменения, и мы хотим убедиться, что состояние всех файлов, влияющих на тест, сохраняется в репозитории.
Пожалуйста, не рекомендуйте вносить фундаментальные изменения в конфигурацию или чтобы каждый пользователь работал из отдельного каталога, а затем выполнял слияния — эти рабочие процессы не будут соответствовать потребностям теста. Общий вход в систему связан с тем, что процесс переключения между пользователями приведет к закрытию программного обеспечения, выполняющего тест, и может привести к повреждению или неудачным тестам. Если для этого не будет решения, мы будем вынуждены вернуться к SVN… а этого никто не хочет.
Ответ №1:
Вы можете указывать имя автора и адрес электронной почты при каждом запуске git commit
, вот так:
git -c user.name='Alex Court' -c user.email=alex@example.com commit
Возможно, вы захотите убедиться, что в вашем .gitconfig
файле не настроено имя или адрес электронной почты, чтобы git не использовал их, если кто-то забудет. Или вы можете написать сценарий-оболочку, который запрашивает пользователя более интерактивным способом.
Ответ №2:
Ответ @JohnZwinck работает, другой вариант с различными незначительными неудобствами-это заставить людей делать, например
export GIT_COMMITTER_NAME='John Kugelman' GIT_COMMITTER_EMAIL=johnk@example.com
и вы могли бы настроить функцию оболочки, названную hi,im
в профиле входа в систему, чтобы задать их из списка, что-то вроде («пальцы в текстовое поле»).:
hi,im() { match=`grep "$*"` ~/namelist
local nmatch=`printf %s "$match"|wc -l`
test $nmatch = 1
|| { echo "$match"; echo need one match for "$*" in ~/namelist; exit; }
eval $match
}
с ~/namelist
включением экспорта, как указано выше. Если ты единственный johnk
, кто мог hi,im johnk
бы это сделать, только начиная свои пробежки. Включите $GIT_COMMITTER_NAME
в строку приглашения, проще всего было export PS1='$GIT_COMMITTER_NAME$ '
бы включить имя текущего пользователя в качестве напоминания при каждом приглашении.
Затем, если в приглашении указано ваше имя, вы можете действовать как обычно, в противном случае hi,im jthill