Исправьте имена пользователей при отслеживании /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 для получения дополнительной информации о команде и классных вещах, которые вы можете сделать с ней.