Jak Git zatwierdzić jako root na Linuksie?

0

Czasami muszę zmodyfikować pliki konfiguracyjne, takie jak /etc repozytorium utworzone przez etckeeper. Robię to:

sudo git commit -am "Modified this setting"

Niestety zostanie zatwierdzony przy użyciu poświadczeń roota. Jedna brudna alternatywa to

sudo git commit -am "Modified this setting" --author "John Doe <[email protected]>"

Czy jest inne rozwiązanie?

Innym przykładem jest mój /var/www pliki ustawione za pomocą 0640 i root:www-data. Jeśli chcę tam zmodyfikować pliki, muszę to zrobić z root kontekst. Jak mogę to zrobić za pomocą własnego konta użytkownika?

nowox
źródło

Odpowiedzi:

2

Ten krótki skrypt może być użyty do osiągnięcia tego, co chcesz, pod warunkiem, że masz poprawnie skonfigurowany git jako zwykłego użytkownika. Akceptuje wszelkie argumenty git commit robi z wyjątkiem --author (które automatycznie generuje) i automatycznie monituje o hasło, więc nie musisz go uruchamiać sudo:

#!/bin/bash

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

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

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

Wyciąga twoje imię i e-mail z konfiguracji git użytkownika, tworzy z tego informacje o autorze, a następnie wywołuje git, aby utworzyć zatwierdzenie. Możesz zastąpić commit dla każdego innego polecenia podrzędnego git, które generuje commits i akceptuje --author argument.

Alternatywnie sklonuj repozytorium jako zwykłego użytkownika (za pomocą klonu SSH, więc dla twojego /var/www przykład, byłoby git clone root@localhost:/var/www ), dokonaj swoich zmian jako zwykły użytkownik, a następnie popchnij je do głównego repozytorium. Daje to nieco większą swobodę w zarządzaniu kopią, jak chcesz, ale wymaga, aby ludzie mogli zalogować się jako root przez ssh na interfejsie loopback.

Pamiętaj jednak, że chcesz być ostrożny z bezpośrednim używaniem git etckeeper, jeśli dodasz lub usuniesz pliki /etc/.etckeeper musi być poprawnie zaktualizowany. Dzieje się tak automatycznie, jeśli to zrobisz etckeeper commit (który niestety nie obsługuje arbitralnego zatwierdzania zatwierdzeń), ale nie, jeśli to zrobisz git commit.

Austin Hemmelgarn
źródło