Przechowywanie konfiguracji git jako części repozytorium

147

Używam filtrów do zmiany plików podczas realizacji transakcji, jak opisano tutaj . Teraz problem polega na tym, że definicja filtru jest przechowywana tylko w moim lokalnym pliku konfiguracyjnym:

$ cat .git/config
....
[filter "dater"]
        smudge = /home/.../expand_date
        clean = perl -pe \"s/\\\\\\$Date[^\\\\\\$]*\\\\\\$/\\\\\\$Date\\\\\\$/\"

Jeśli moi współpracownicy chcą skorzystać z tego Daterozszerzenia, muszą skopiować moją definicję filtra. A jeśli to zmienię, muszę ich powiadomić itd.

Czy mogę więc przechowywać część definicji filtru .git/configw repozytorium i sprawić, by Git go użył?

Zaar Hai
źródło
To łącze może być przydatne do automatycznego udostępniania konfiguracji całego zespołu.
mljrg

Odpowiedzi:

163

Istnieją 3 Obsługiwane zakresy .gitconfigpliku: --system, --global, --local. Możesz również utworzyć niestandardowy plik konfiguracyjny i dołączyć go do jednego z obsługiwanych plików.

Dla Twoich potrzeb niestandardowych - to właściwy wybór. Zamiast wpisywać swój filtr .git/config, powinieneś zapisać go w .gitconfigpliku w katalogu głównym repozytorium:

your-repo/
│
├── .git/
│   ├── config
│
├── .gitconfig
│

Utwórz .gitconfigz filtrem i zatwierdź zmiany. Wtedy twoi koledzy zawsze będą go aktualizować - ale będą musieli dodać to ręcznie. Nie jest możliwe automatyczne dołączenie niestandardowego pliku konfiguracji za pośrednictwem samego git, ponieważ stwarza to lukę w zabezpieczeniach.

Aby zastosować tę konfigurację dla pojedynczego repozytorium, każdy użytkownik będzie musiał uruchomić następujące polecenie w your-repo/:

git config --local include.path ../.gitconfig

Uważaj, aby nie przechowywać danych osobowych w niestandardowym formacie .gitconfig, na przykład user.*na swoim globalnym .gitconfig.

Alexander Yancharuk
źródło
40
Chcę uniknąć powiadamiania każdego możliwego użytkownika, że ​​musi uwzględnić repozytorium .gitconfigw swoim ~/.gitconfig. Nikt tego nie zapamięta. Czy istnieje sposób, aby Git ZAWSZE czytać repozytoria .gitconfig.
Zaar Hai,
9
@ZaarHai: Zgaduję, że nie, ponieważ byłoby to niebezpieczne. (Wyobraź sobie klonowanie repozytorium, które aliasuje polecenia z czymś „interesującym”, np. Eksportowanie zawartości katalogu domowego). Jeśli masz coś takiego jak configureskrypt lub coś podobnego, który użytkownicy muszą uruchomić, możesz ustawić dołączenie (lub zachęcić użytkownika do).
Hasturkun,
4
@HenryBlyth wydaje się, że jest --filewłączona opcja git config, możesz następnie ustawić ją tak, aby wskazywała na twoje repozytorium .gitconfig. Jeszcze tego nie testowałem, ale wydaje się, że odpowiada na twoje pytanie. Możesz to przeczytać w dokumentach. git-scm.com/docs/git-config#FILES
theUnknown777
12
Byłoby świetnie, gdyby Git nie zakładał, że piszesz kod dystrybuowany poza organizacją, gdzie musisz uważać na zagrożenia bezpieczeństwa. Czasami użyteczność systemu i automatyzacja mają wyższy priorytet niż bezpieczeństwo.
Geordie,
2
Możesz podstępnie dodać polecenie do zadania (zakładając, że używasz modułu do uruchamiania zadań) rutynowo używanego przez Twój zespół.
Mieszko
19

Nie możesz .gitconfigdomyślnie używać pliku w repozytorium git, ale możesz połączyć się z nim, aby konfiguracja git została wersjonowana.

Możesz do niego linkować w ten sposób:

[include]
  path = ../.gitconfig

Stworzyłem prosty skrypt, gitconfig.sh który zrobi to za Ciebie (znacznie szybciej niż kopiowanie) + prosty .gitconfigplik, więc jeśli chcesz, zajrzyj do tego repozytorium https://github.com/HoBi/dotfiles .


EDYTUJ : Usunąłem plik, ale możesz go znaleźć tutaj https://github.com/tenhobi/dotfiles/blob/7e4376c006c508370b82bc7bd37173fab51dbd01/git/.gitconfig.sh

tenhobi
źródło
Naprawiono @XmlmXmlmX. :-)
tenhobi
@HoBi wygląda na to, że usunąłeś teraz swój plik gitconfig.sh z GitHub, czy jest jakiś powód, dla którego już go nie chciałeś?
Nowicjusz C
1
@NoviceC Jest plik, jeśli chcesz. github.com/HoBi/dotfiles/blob/… Doszedłem do wniosku, że nie powinieneś przechowywać plików .gitconfig lub gitconfig.sh w swoim projekcie git - są to ustawienia osobiste i powinny być przechowywane w ustawieniach globalnych w ~/folderze. Każdy może mieć inne potrzeby, więc po co wszystkim zawracać sobie głowę konfiguracją w repozytorium git. :-)
tenhobi
@tenhobi jest kilka konfiguracji, które mogą być interesujące dla wszystkich do udostępnienia w projekcie. Zrobię to dla aliasów, z przepływem kodowania projektu
Z. Khullah