Исправьте имена пользователей при отслеживании /etc/ в репозитории git и фиксации от имени пользователя root
Мы используем Git для отслеживания изменений в /etc/
на наших серверах.
Администраторы работают как root при изменении файлов в /etc/, и поэтому их коммиты имеют автора
root <root@machinename>
Это не очень приятно, так как вы не можете видеть, какой администратор действительно внес изменения.
Что мы можем сделать, чтобы получить настоящие имена администраторов в журнале git? Я не думаю, что сохранение локального клона репозитория возможно, так как мы часто меняемся интерактивно, пока что-то не работает, и цикл change-commit-push-seeError-repeat здесь не поможет.
6 ответов
На имя автора git и имя коммиттера могут влиять переменные окружения GIT_COMMITTER_NAME
, GIT_COMMITTER_EMAIL
, GIT_AUTHOR_NAME
а также GIT_AUTHOR_EMAIL
,
Теперь хитрость заключается в том, чтобы передать эти переменные на удаленный сервер при подключении через SSH:
Определите и экспортируйте переменные в вашем
~/.bashrc
файл:export GIT_AUTHOR_NAME="Christian Weiske"
Автоматически отправляйте их по SSH-соединению, настраивая
~/.ssh/config
:SendEnv LANG LC_* GIT_*
LANG
а такжеLC_*
не являются необходимыми, но в Debian по умолчанию используется ssh_config, так что я подумал, что их тоже нужно отправитьНа удаленном сервере настройте конфигурацию sshd в
/etc/ssh/sshd_config
принятьGIT_*
переменные среды:AcceptEnv LANG LC_* GIT_*
Вуаля git commit
как корень в /etc/
приводит к:
commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <christian.weiske@netresearch.de>
В случае сбоя сервера в будущем: http://cweiske.de/tagebuch/carry-git-settings.htm
Во-первых, и не имеет отношения к вашему вопросу, я призываю вас срочно прекратить использование root
логины и su
и использовать логины пользователей и sudo
вместо. Ограничить ваш root
вход в консоль только или нет.
Это сказало, git commit
имеет --author
вариант, который может помочь вам там:
# git commit --author='Author Name <author@email.address.com>' -a
Вы также можете осторожно использовать переменные среды для каждого пользователя, чтобы установить GIT_AUTHOR_NAME
а также GIT_AUTHOR_EMAIL
переменные. В журнале появятся разные авторы и один и тот же коммитер (root@host
), но это даст вам больше одитинга. Конечно, это означает, что вы доверяете своим администраторам сохранять переменные нетронутыми. Поскольку каждый использует определенную оболочку, они могут sudo
рутировать и исходный файл с их конкретными git
переменные, по-разному идентифицирующие каждую в коммитах. Не очень практично, но вы можете даже автоматизировать это с помощью сценариев.
РЕДАКТИРОВАТЬ: Конечно, еще лучший подход, назначенный @ScottPack, состоит в том, чтобы использовать систему управления конфигурациями, такую как Puppet или Chef, и использовать git для отслеживания изменений на центральном сервере, а не на реальных серверах, чтобы у каждого администратора была рабочая копия. конфигурации.
Если вам случится подготовить учетные записи пользователей на ваших серверах с помощью ключей ssh, вы можете фактически присоединить переменные среды к авторизованным ключам во время установки - например, в ~bob/.ssh/authorized_keys.
environment="GIT_AUTHOR_NAME=Bob Smith",environment="GIT_AUTHOR_EMAIL=bob.smith@megacorp.com" ssh-rsa AAAA.... bob.smith@megacorp.com
Таким образом, когда пользователи SSH автоматически устанавливают эти envs, им не нужно пересылать их с локального клиента. Бонусные баллы, если у вас уже есть эта информация, и вы генерируете константы author_keys из системы управления конфигурациями.
Примечание: вышеуказанное требует PermitUserEnvironment yes
в sshd_config
С putty вы можете установить это в "Соединение -> Данные -> Переменные среды".
Они также присутствуют послеsu
к корню.
Если вы используете sudo
и ваш не-root пользователь смонтировал свой домашний каталог:
git -c include.path=<file>
будет включать конфигурацию в <file>
,
Чтобы автоматически загружать файлы конфигурации моего пользователя без полномочий root, я использую bash
псевдоним:
alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""
Тогда я использую gsudo
вместо git
как для:
- Запуск от имени пользователя root
- Иметь доступ ко всем пользовательским настройкам git без полномочий root
Убедитесь, что конфиг действительно импортируется:
gsudo config --list --show-origin --includes | less
В дополнение к ответу coredump вы также можете установить эти параметры в .git/config
файл в вашей рабочей копии хранилища (вручную или с помощью git config
команда.
Увидеть man git-config
для получения дополнительной информации о команде и классных вещах, которые вы можете сделать с ней.