Иногда мне приходится модифицировать конфигурационные файлы, такие как репозиторий /etc созданный etckeeper. Итак, я делаю это:

sudo git commit -am "Modified this setting"

К сожалению, он будет зафиксирован с использованием учетных данных root. Одна грязная альтернатива

sudo git commit -am "Modified this setting" --author "John Doe <jdoe@doe.com>"

Есть ли другое решение?

Еще один пример - мои /var/www файлы, установленные с 0640 и root:www-data . Если я хочу изменить там файлы, я должен сделать это из root контекста. Как я могу сделать это с моей собственной учетной записью?

2 ответа2

2

Этот короткий скрипт может быть использован для достижения того, чего вы хотите, при условии, что вы правильно настроили git как своего обычного пользователя. Он принимает все аргументы, которые делает git commit , кроме --author (который он генерирует автоматически), и автоматически запрашивает у вас пароль, поэтому вам не нужно запускать его с помощью sudo:

#!/bin/bash

name=`git config --get user.name`
email=`git config --get user.email`

author="${name} <${email}>"

sudo git commit --author "$author" $@

Он извлекает ваше имя и адрес электронной почты из конфигурации git вашего пользователя, создает из него информацию об авторе и затем вызывает git для создания коммита. Вы можете заменить commit любой другой подкомандой git, которая генерирует коммиты и принимает аргумент --author .

В качестве альтернативы, клонируйте репозиторий как обычный пользователь (через клон SSH, так что для вашего примера /var/www это будет git clone root@localhost:/var/www), сделайте коммиты вашим обычным пользователем, а затем нажмите их в основной репозиторий. Это дает вам больше свободы для управления вашей копией, как вы хотите, но требует, чтобы люди могли войти в систему как пользователь root через ssh на интерфейсе обратной связи.

Однако обратите внимание, что вы хотите быть осторожным с использованием git напрямую с etckeeper , если вы добавляете или удаляете файлы /etc/.etckeeper должен корректно обновляться. Это происходит автоматически, если вы делаете etckeeper commit (который, к сожалению, не поддерживает произвольное авторство коммитов), но не если вы просто делаете git commit .

0

Чтобы автоматически включать файлы конфигурации моего пользователя без полномочий 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .