Wydaje się, że Git obsługuje wartości konfiguracji na trzech poziomach:
- Globalne ustawienia dla systemu (przechowywane w
/etc/git-core
) - Ustawienia globalne dla użytkownika (przechowywane w
~/.gitconfig
) - Ustawienia lokalne dla repozytorium (przechowywane w
$REPO/.git/config
)
Te opcje obejmują większość podstaw, ale szukam sposobu na obsługę czwartego poziomu. Mam (bardzo) dużą kolekcję repozytoriów, dla których muszę użyć innej wartości user.email
niż dla mojej zwykłej. Te repozytoria są często tworzone i modyfikowane za pomocą automatycznych skryptów, a konfigurowanie lokalnych ustawień dla repozytorium jest uciążliwe.
Wszystkie przedmiotowe repozytoria znajdują się pod pewnym prefiksem ścieżki w moim systemie lokalnym. Czy istnieje sposób ustawienia gdzieś wartości konfiguracji, która zostanie odziedziczona przez wszystkie repozytoria w ramach tej ścieżki? (Coś w rodzaju .htaccess
ustawień dziedziczy cały system plików.) Być może istnieje sposób na ustawienie wartości warunkowych w globalnym pliku konfiguracyjnym? Jakie inne ustalenia można wprowadzić w środowisku UNIX, aby poradzić sobie z zestawem repozytoriów takich jak mój?
.gitconfig
w każdym utworzonym katalogu. Na przykład repozytorium Androida IIRC może to zrobić, ale musisz uważnie przeczytać źródło, aby się dowiedzieć. (Nie jestem do końca pewien, nie robiłem tego od dłuższego czasu.)Odpowiedzi:
Nie znalazłem sposobu na skonfigurowanie git na tym czwartym poziomie. Wydaje się, że jedynym sposobem jest zastąpienie wartości konfiguracyjnej dla jednego polecenia za pomocą
git -c key=value
.Moje obecne hacky rozwiązanie polega na zdefiniowaniu funkcji powłoki, która służy jako opakowanie dla git. Po wywołaniu przekazuje argumenty do systemowej komendy git, ale nie przed sprawdzeniem bieżącego katalogu roboczego i dodaniem dodatkowego argumentu do komendy, jeśli dotyczy.
źródło
command git -c [email protected] user.name="Alter Ego" "$@"
lub jak to zrobić? Szukałem wysoko i nisko, a jedyne odniesienie do tej flagi -c, które znalazłem, było twoje, dziękuję bardzo.command git -c [email protected] -c user.name="Alter Ego" "$@"
Możesz skonfigurować adres e-mail dla git za pomocą zmiennej środowiskowej
GIT_AUTHOR_EMAIL
. Jeśli połączysz to ze skryptem Wykonuj bash po wejściu do katalogu lub konfiguracji powłoki specyficznej dla katalogu za pomocą zsh , możesz łatwo zmienić ustawienia dla katalogu lub katalogu nadrzędnego, np. Jeśli wejdziesz do katalogu~/work
, możesz automatycznie dostosować zmienne środowiskowe, aby zmienić adres e-mail adres.źródło
Zobacz rozwiązanie oparte na konfiguracji git:
http://gik.firetrot.com/index.php/2018/05/06/git-configuration-across-multiple-repositories/
Dodaj do pliku „~ / .gitconfig”:
Utwórz plik „~ / .gitconfig-project1 with z zawartością:
źródło
W oparciu o odpowiedź Caleba możemy zdefiniować zmodyfikowane
git
polecenie, które trwale konfiguruje wszystkie repozytoria w tym katalogu poprawnie, tak aby wszystkie przyszłe zastosowania waniliowego gita korzystały z nowej konfiguracji. Używamhub
, który jest kolejnym otokiem git, więc zastąpiłemalias git=hub
go tym i wywołałemhub
w mojej funkcji - jeśli nie używaszhub
, zamień wszystkiehub
wywołania nacommand git
:W przeciwieństwie do odpowiedzi Caleba, która działa tylko w powłoce (i jeśli nie jest to wyraźnie pozyskiwane, tylko w powłoce interaktywnej), wpływa to również na inne interfejsy git, które poprawnie odczytują konfigurację git, takie jak emacs magit.
źródło