Czy warto używać git do kontroli wersji plików konfiguracyjnych?

18

Używam Gentoo Linux i ma dość złożoną konfigurację. Moje pytanie, czy mądrze jest używać git do kontroli wersji plików konfiguracyjnych?

Mam kilka repozytoriów git w moim domu, domyślam się, że jeśli wstawię / home / ** do mojego .gitignore, nie spowodują one problemów.

Aktualizacja wyjaśnienia:

Czy to mądra metoda używania git do kontroli wersji plików konfiguracyjnych na poziomie systemu w katalogu głównym „/”?

atevm
źródło
@AnthonyGeoghegan Chciałem śledzić mój katalog główny „/”, co może prowadzić do interesujących konsekwencji w przyszłości, więc link do wątku tylko częściowo odpowiada na moje pytanie. Druga część: czy rozsądnie jest używać git do kontroli wersji moje pliki konfiguracyjne wciąż bez odpowiedzi
atevm
1
@AnthonyGeoghegan dzięki. Zaktualizowałem pytanie.
atevm

Odpowiedzi:

19

Krótka odpowiedź na twoje pytanie brzmi: tak .


Nie zawahałbym się polecić Git (lub innego oprogramowania do kontroli wersji) do śledzenia plików konfiguracyjnych. Od tego czasu byłem bardziej produktywny (szczególnie przy konfigurowaniu nowych instalacji) i mam większe zaufanie do moich plików konfiguracyjnych. Z kontrolą wersji, mam zapis tego, co dokonano zmian i popełnić wiadomość zapewnia powód dlaczego zmiana została dokonana. Jeśli zmiana ma niezamierzone skutki uboczne, mogę łatwo przejrzeć dziennik / historię, aby zobaczyć, jakie zmiany spowodowały te skutki.

Osobiście uważałbym, aby nie śledzić wszystkich plików w /katalogu głównym. Lista ścieżek do zignorowania może stać się duża i niewygodna. Wolę przechowywać każdy logiczny zestaw plików we własnym repozytorium.

Ręcznie używam Git do śledzenia moich osobistych plików konfiguracyjnych / startowych, np. Konfiguracji Vima, funkcji Bash, aliasów itp. - podobnie do podejścia wymienionego w Jak śledzić $ HOME za pomocą git . Trzymam każdy zestaw plików we własnym repozytorium i używam dowiązań symbolicznych do katalogu domowego.

W przypadku plików konfiguracji systemu używam Git z Etckeeper do śledzenia plików w moim /etckatalogu.

Wady

Jedną z kwestii, na którą należy uważać, jest to, że śledzone pliki zawierają twarde linki . Gdy Git jest używany do sprawdzania plików lub modyfikowania drzewa roboczego w inny sposób, odłącza pliki, a następnie ponownie je tworzy . Pełniejsze wyjaśnienie znajdziesz w Git, Dotfiles i Hardlinks .

Etckeeper

Etckeeper może być używany do przechowywania pełnej historii zmian dokonanych w / etc. Śledzi metadane plików, których systemy kontroli wersji zwykle nie obsługują, ale jest to ważne dla/etc , na przykład dla uprawnień /etc/shadow.

Łączy się z menedżerami pakietów, takimi jak apt i yum, i (w domyślnej konfiguracji) uruchamia przed i po instalacji, aby wszystkie zmiany /etcbyły śledzone.

Jeśli pakiet zostanie zainstalowany lub usunięty, wszystkie niezatwierdzone zmiany w / etc zostaną zatwierdzone przed operacją pakietu, tak aby były dwa zatwierdzenia:

  1. „Zapisywanie niezatwierdzonych zmian w / etc przed uruchomieniem yum”
  2. „Zatwierdzanie zmian w / etc po uruchomieniu”

Użyłem go z dystrybucjami opartymi na Debianie i Red Hacie i wiem, że obsługuje zarządzanie pakietami Arch. Nie mogę powiedzieć, ile automatyzacji dodałoby to do systemu Gentoo, ale dostępny jest pakiet .

Obsługuje także wypychanie plików konfiguracyjnych do zdalnego repozytorium (które oczywiście powinno być prywatne).

Konfiguracja

Po zainstalowaniu pakietu może być konieczne jego skonfigurowanie ( /etc/etckeeper/etckeeper.conf), np. W systemach Ubuntu domyślny system kontroli wersji zmienia się z Git na Bazar. Możesz także chcieć wyłączyć codzienne automatyczne zatwierdzanie .

Codzienne automatyczne zatwierdzanie

Zmiany mogą być automatycznie zatwierdzane przez codzienne zadanie CRON . Może to być denerwujące, ponieważ repozytorium może być zaśmiecone wieloma automatycznymi komunikatami zatwierdzania.

Odkomentuję odpowiednią linię w /etc/etckeeper/etckeeper.conf:

sed -i '/AVOID_DAILY_AUTOCOMMITS/s|^#* *||' /etc/etckeeper/etckeeper.conf

Zignoruj ​​określone pliki

Edytować /etc/.gitignore aby określić pliki, które nie powinny być śledzone.

Pierwszy bieg

Po skonfigurowaniu uruchom następujące polecenia:

sudo etckeeper init
sudo etckeeper commit "Initial commit"

Jeśli masz bieżący katalog etc, możesz uruchamiać regularne gitpolecenia, np.

sudo git status
sudo git log
Anthony Geoghegan
źródło
1
Wow, to było bardzo przydatne i szczegółowe ... dziękuję :)
atevm
Wystarczy zaktualizować bardzo dobrze napisaną odpowiedź: etckeeperpodczas codziennego zatwierdzania faktycznie sprawdzi najpierw, czy /etcjest „nieczysty”, tzn. Czy ma nieprzypisane pliki. Jeśli nie, to się nie zatwierdzi. Więc jeśli twój dziennik zatwierdzeń jest pełen dziennych zatwierdzeń, są szanse, że istnieją pliki, które zmieniają się codziennie, których nie dodałeś do .*ignorepliku :-)
pepoluan
Również w Ubuntu ma tę irytującą tendencję do natychmiastowego wykonywania bzr init--__-- ... Polecam zawsze działać etckeeper uninit -fpo instalacji.
pepoluan
Zauważ, że etckeeper oczywiście nie jest już hostowany na github. Używają teraz własnego systemu na swojej stronie głównej. Prawdopodobnie pewna awersja M $ po stronie autora. Osobiście uważam, że to niefortunna decyzja, ponieważ teraz nie możesz łatwo zgłaszać problemów i nie możesz zobaczyć, jak popularny jest projekt.
Michael Härtl
Dzięki @ MichaelHärtl Usunąłem nieaktualny link do repozytorium GitHub.
Anthony Geoghegan
3

Korzystam z git, aby śledzić określone obszary mojego katalogu domowego. Osobiście nie podążałbym ścieżką śledzenia katalogu głównego, ale muszę powiedzieć, że podziwiam twoje ambicje. :)

Być może ta kolekcja doświadczeń może dać ci lepsze pojęcie o tym, w co się pakujesz:

efekty zainicjowania repozytorium git na głównym katalogu Linux 3 :)

Przepraszam za „odpowiedź”, zamiast po prostu zamieścić link w komentarzu; jednak za mało powtórzeń, ale chciałem wejść.

Edytować

Łał! Bardzo ładna odpowiedź autorstwa @AnthonyGeoghegan. Wierzę, że nie jest to tak trudna walka, jak ją pierwotnie przewidywałem.

Michael Stilson
źródło
0

Używam również gitdo przechowywania i konserwacji dotfiles, ale w git bare repository. Szczegółowy przewodnik można znaleźć tutaj . Korzystam z dwóch repozytoriów, jednego dla moich plików dotfiles o nazwie myconfi jednego dla plików dot o nazwie root rootconf.

Ponadto możesz używać obu konfiguracji na wielu komputerach, różnych dystrybucjach systemu Linux lub maszynach wirtualnych: po prostu utwórz nową gałąź dla odrębnej konfiguracji. Następnie unikasz pomieszania kodu w tym samym pliku (np. .bash_alias): Nie irytujesz, jeśli chcesz sprawdzić bieżącą maszynę; nie potrzebujesz żadnych linków!

Chris
źródło