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?

Author: Alan W. Smith, 2012-02-18

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:

  1. Utwórz wersję pliku konfiguracyjnego o nazwie " Config-sample.ini". To akta, nad którymi będziesz pracował.

  2. 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".

  3. Update your .gitignore, aby zapobiec " config.ini " od bycia przechowywanym. Oznacza to, że dodaj " config.ini " linia:
    echo "config.ini" >> .gitignore
    
  4. (opcjonalne, ale wysoce zalecane) Utwórz .gitattributes file with the line " config.ini export-ignoruj".

    echo "config.ini export-ignore" >> .gitattributes
    
  5. Zrób trochę kodowania i wdrożyć....

  6. 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ć.)

 37
Author: Alan W. Smith,
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.

 5
Author: Matt Gibson,
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

 2
Author: jribeiro,
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 do app.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.
 2
Author: joeytwiddle,
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