Git best practice for config files etc
Wciąż jestem nowy we wszystkich rzeczach git i zastanawiałem się, co jest najlepszą praktyką w odniesieniu do plików konfiguracyjnych. Mój lokalny serwer programistyczny potrzebuje innych wartości konfiguracyjnych niż mój aktywny, więc jak mogę powstrzymać to pchanie / ciągnięcie tych plików?
4 answers
Użyj dowiązań symbolicznych.
Weźmy przykład, w którym masz plik konfiguracyjny o nazwie "config.ini". W katalogu roboczym twojego Git repo, wykonasz następujące czynności:
Utwórz wersję pliku konfiguracyjnego o nazwie " Config-sample.ini". To akta, nad którymi będziesz pracował.
-
Utwórz dowiązanie symboliczne pomiędzy " config.ini " i " Config-sample.ini".
ln -s config-sample.ini config.ini
To niech cały Twój kod wskazuje na " config.ini " mimo, że jesteś naprawdę utrzymanie " Config-sample.ini".
-
Update your .gitignore, aby zapobiec " config.ini " od bycia przechowywanym. Oznacza to, że dodaj " config.ini " linia:
echo "config.ini" >> .gitignore
-
(opcjonalne, ale wysoce zalecane) Utwórz .gitattributes file with the line " config.ini export-ignoruj".
echo "config.ini export-ignore" >> .gitattributes
Zrób trochę kodowania i wdrożyć....
Po wdrożeniu kodu do produkcji skopiuj "Config-sample.ini "file over to" config.ini". Będziesz musiał zrobić jakiekolwiek dostosowania niezbędne do konfiguracji do produkcji. Wystarczy to zrobić tylko przy pierwszym wdrożeniu i każdej zmianie struktury pliku konfiguracyjnego.
Kilka korzyści z tego:
Struktura pliku konfiguracyjnego jest utrzymywana w repo.
Rozsądne wartości domyślne można zachować dla wszystkich opcji konfiguracji, które są takie same między dev i production.
Twój " config-sample.ini " będzie aktualizować za każdym razem, gdy naciśniesz nowa wersja do produkcji. To sprawia, że o wiele łatwiej zauważyć wszelkie zmiany, które trzeba wprowadzić w " config.ini " teczka.
Nigdy nie nadpisujesz wersji produkcyjnej " config.ini". (Opcjonalny krok 4 z .plik gitattributes dodaje dodatkową gwarancję, że nigdy nie wyeksportujesz swojego " config.plik ini " nawet jeśli przypadkowo dodasz go do repo.)
(to działa świetnie dla mnie na Mac i Linux. Domyślam się, że istnieje odpowiednie rozwiązanie możliwe na Windows, ale ktoś inny będzie musiał to skomentować.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-18 17:10:00
Git zignoruje pliki, których nie dodajesz jawnie, więc sprawdzanie różnych gałęzi pozostawia je tam, gdzie znajdują się w strukturze katalogów, gdy inne pliki zmieniają się wokół nich. Jeśli dodasz swój plik konfiguracyjny doplik gitignore w katalogu głównym repo (może trzeba go utworzyć, więcej informacji Tutaj ), a następnie możesz nadal wykonywać polecenia all-files, takie jak
git add .
Jeśli chcesz i nie martw się o to.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-25 14:23:29
Najlepszym sposobem jest utworzenie pliku o nazwie ".gitignore " i wstaw pliki / foldery, które chcesz zignorować.
W ten sposób możesz zrobić git add * everytime
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-18 16:38:07
Dostępne są różne opcje:
1. Zatwierdzanie domyślnego pliku konfiguracyjnego, ale zezwalanie na lokalny plik konfiguracyjny
Dodaj plik default.conf
do repozytorium Git.
Twoja aplikacja najpierw szuka app.conf
, ale jeśli to nie istnieje, używa default.conf
.
Użytkownicy, którzy chcą mieć domyślną konfigurację, mogą skopiować default.conf
do app.conf
, a następnie ją edytować.
Użytkownicy nie powinni zatwierdzać app.conf
do repozytorium, ponieważ różni użytkownicy mogą chcieć różnych ustawień w tym pliku. (Więc należy umieścić app.conf
do twojego .gitignore
.)
With a twist (recommended)
Twoja aplikacja zawsze ładuje default.conf
, ale jeśli app.conf
jest obecna, to skopiuje ustawienia z app.conf
nad ustawieniami z default.conf
.
Ten zwrot ma kilka zalet:
app.conf
musi tylko trzymać różnice od domyślnych, dzięki czemu jest mniejszy i łatwiejszy w utrzymaniu.Gdy aplikacja się zmieni, nowe wartości domyślne dodane do
default.conf
będą dostępne dla aplikacji, bez konieczności kopiowania ich doapp.conf
.
To rozwiązanie jest dość podobne do powyższej odpowiedzi Alana W. Smitha, z niewielką różnicą: Jeśli aplikacja może rozpocząć się bez Pliku
app.conf
, to będzie działać po wyjęciu z pudełka. Jednak to dodaje trochę złożoności do kodu startowego aplikacji.Sugestia była jedną z kilku przedstawionych przez Linusa Torvaldsa na liście dyskusyjnej Gita lub kernela, ale nie udało mi się jej znaleźć dzisiaj.
2. Użyj zmiennych środowiskowych i / lub argumentów linii poleceń
Możesz użyć zmiennej środowiskowej, aby skierować aplikację na konkretny plik konfiguracyjny. Możesz uruchomić swoją aplikację w ten sposób:
CONFIG_FILE=test.conf ./start-app
Lub alternatywnie:
./start-app --config=test.conf
Oznacza to, że możesz mieć wiele plików konfiguracyjnych development.conf
, staging.conf
i production.conf
. Po uruchomieniu aplikacji można powiedzieć, który plik konfiguracyjny użyć.
Programiści, którzy chcą poeksperymentować z inną konfiguracją mogą wskazać na własne pliki, np. custom.conf
.
Możesz również użyć zmiennych środowiskowych lub argumentów linii poleceń, aby nadpisać określone ustawienia:
./start-app --config=default.conf --db-url=... --debug-level=5
3. Różne gałęzie
Możesz zachować domyślną konfigurację w gałęzi master.
Rozwidlaj różne gałęzie dla każdego z Twoich różnych środowisk.
Każda gałąź może modyfikować domyślny plik konfiguracyjny w razie potrzeby.
Kiedy twoja gałąź master aktualizuje się, Połącz się z master do swojego konkretnego gałęzie.
Osobiście nie polecam takiego podejścia. Myślę, że to trudniejsze do utrzymania.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-10 06:12:30