Czy można dołączyć plik do .gitconfig

245

Chciałbym dołączyć plik do mojego .gitconfig, który ma moje ustawienia github - czy to możliwe?

Czy mogę zrobić coś takiego:

[core]
    include = /path/to/file
David Reynolds
źródło
3
„Nie chcę dołączać do niego szczegółów github, dlatego chciałbym jakoś dołączyć je z pliku zewnętrznego”: właśnie do tego służy globalny plik konfiguracyjny. Czy jest jakiś powód, aby nie używać go w twoim przypadku?
VonC
11
Tak, ponieważ chcę opublikować .gitconfig w repozytorium git i nie chcę, aby ktoś ukradł moje poświadczenia github.
David Reynolds,
Nie podążam za tobą: twój zwykły plik gitconfig zostanie opublikowany w github, ale bez żadnych ustawień github. Czemu? Ponieważ byłyby one w twoim globalnym pliku konfiguracyjnym ( ~/.gitconfig), tzn. Nie zostałyby wypchnięte na twoje repozytorium github. Gdy wpiszesz „ git config”, zobaczysz konkatenację 3 pliku konfiguracyjnego (repo, globalnego i systemowego). Wypychany jest tylko plik konfiguracyjny repo. Pozostałe 2 pozostają lokalne.
VonC
90
wygląda na to, że wszyscy nie rozumieli sedna tego pytania. David oczywiście chce wypchnąć repozytorium wszystkich swoich plików kropek (bashrc, gemrc itp.), W TYM swojego .gitconfig, aby mógł mieć wszystkie swoje ustawienia na wszystkich swoich komputerach. Sposobem na wypchnięcie części pliku .gitconfig poprzez włączenie i ignorowanie prywatnych wpisów jest to, czego on (i ja, jeśli o to chodzi)
Bo Jeanes,
5
@bjeanes: precyzyjnie! Nadal nie znalazłem sposobu, aby to zrobić.
David Reynolds,

Odpowiedzi:

302

Git (1.7.10+) obsługuje teraz tę składnię w .gitconfig:

[include]
    path = /path/to/file

Zobacz tutaj, aby uzyskać szczegółowy opis zmiany git i jego przypadków brzegowych.

Nawiasem mówiąc, kilka subtelności, na które warto zwrócić uwagę:

  1. Rozszerzenia zmienne środowiskowe, np. $HOMENie są obsługiwane. (Rozbudowa ~pojawiła się w Git 1.7.10.2.)

  2. Jeśli podano ścieżkę względną, jest ona względna do pliku .gitconfig, który zawiera [include]instrukcję. Działa to poprawnie, nawet w łańcuchach obejmujących - np. ~/.gitconfigMoże mieć:

    [include]
        path = subdir/gitconfig
    

    i subdir/gitconfigmoże mieć:

    [include]
        path = nested_subdir/gitconfig
    

    ... co spowoduje subdir/nested_subdir/gitconfigzaładowanie.

  3. Jeśli git nie może znaleźć pliku docelowego, dyskretnie ignoruje błąd. Wydaje się, że jest to zgodne z projektem.

Mike Morearty
źródło
7
właściwie nie potrzebujesz ~. dzieje się tak, ponieważ plik .gitconfig nadal musi znajdować się we ~/.gitconfigwzględnej ścieżce w konfiguracji, co oznacza ~...
robustus
2
Rozszerzenie ~/ $HOMEjest w rzeczywistości od git describe --contains 4c0a89fc-> v1.7.10.2~12^2(tj. v1.7.10.2Lub później), godne uwagi, ponieważ wydaje się, że Debian 7 i Ubuntu Quantal zostaną wydane z v1.7.10.4.
FauxFaux,
1
Czy to obsługuje globusy? np. ścieżka = ~ / gitconfig.d / *?
Bret,
1
@Bret nie, to nie obsługuje globów.
Mike Morearty
8
Należy pamiętać, że konfiguracje zawarte w ten sposób nie będą wyświetlane, gdy plik podany jest specyficzny (czyli z --global, --locallub --file), chyba że wyraźnie powiedział, ze --includes(jak git config --global --includes --list).
Franklin Yu
16

Aktualizacja 2012:

Zobacz Mike'a Morearty „s odpowiedź :

Obejmuje

Możesz dołączyć jeden plik konfiguracyjny z drugiego, ustawiając specjalną include.pathzmienną na nazwę pliku, który ma być dołączony.
Dołączony plik jest natychmiast rozwijany, tak jakby jego zawartość została znaleziona w miejscu dyrektywy włączającej.
Jeśli wartość include.pathzmiennej jest ścieżką względną, ścieżkę uważa się za względną do pliku konfiguracyjnego, w którym znaleziono dyrektywę dołączającą.
Wartość include.pathpodlega rozszerzeniu tyldy: ~/jest rozwijana do wartości $HOMEi ~user/do katalogu domowego określonego użytkownika.


Nie sądzę.

Wolę umieścić to ustawienie w ~/.gitconfigpliku

Plik konfiguracyjny specyficzny dla użytkownika. Nazywany także „konfiguracją globalną”.

W ten sposób uzupełnia plik specyficzny dla projektu .gitconfig, bez publikowania po przekazaniu do GitHub. Zobacz także tę odpowiedź SO, aby uzyskać więcej informacji o globalnym pliku konfiguracyjnym.
Git ma 3 pliki konfiguracyjne .


bjeanes dodaje w komentarzach:

wygląda na to, że wszyscy nie rozumieli sedna tego pytania.
David oczywiście chce push up repo wszystkich jego plików (dot bashrc, gemrcitp), w tym jego .gitconfigwięc on może mieć wszystkich swoich ustawień na wszystkich swoich maszynach.
Sposobem na wypychanie części .gitconfigpliku poprzez dołączanie i ignorowanie prywatnych wpisów jest to, czego on (i ja, jeśli o to chodzi).

Możliwym sposobem byłoby użycie sterownika rozmazywania / czyszczenia filtra do odszyfrowywania / szyfrowania jednego pliku za pomocą poufnych informacji (patrz ten wątek ), aby uzupełnić plik lokalny taki jak ~ / .gitconfig z odszyfrowanymi częściami, które są do tego odpowiednie plik.

W ten sposób możesz mieć repozytorium Git ze wszystkimi plikami kropek oraz jeden plik z zaszyfrowanymi informacjami przeznaczonymi do odszyfrowania i dodania do wspomnianych plików kropek.

alternatywny tekst

W .gitattributes(lub .git/info/a..) użyciu:

myPrivateInfosFile filter=gpg diff=gpg

W pliku .config repo:

[filter "gpg"]
smudge = gpg -d -q --batch --no-tty
clean = gpg -ea -q --batch --no-tty -r C920A124
[diff "gpg"]
textconv = decrypt

( rozwiązanie oparte na GPG oznacza oczywiście, że przesłałeś swoje klucze prywatne / publiczne w inny sposób na komputer docelowy, na którym chcesz przywrócić wszystkie pliki kropek poprzez klonowanie tego specjalnego repozytorium)

W twoim przypadku skrypt smudge musi zostać wypełniony, ponieważ po odszyfrowaniu tego pliku kontynuuj dodawanie odpowiednich części do ~/.gitconfigpliku globalnego (chyba że zastąpisz globalny plik konfiguracyjny inną lokalizacją ) lub inne pliki kropek. materia.

https://kerneltrap.org/mailarchive/git/2008/3/13/1153274/thread (niedogodności związane z gpg są omówione w dalszej części tego wątku ) (różni się to od posiadania pełnego szyfrowanego repozytorium Git, jak omówiono tutaj )

VonC
źródło
5
Chcę opublikować mój podstawowy plik .gitconfig w repozytorium git, ale nie chcę w nim zawierać szczegółów github, dlatego dlaczego chciałbym w jakiś sposób dołączyć je z pliku zewnętrznego.
David Reynolds,
10

Możesz załadować go z wiersza poleceń:

$ git config --local include.path "/path/to/.gitconfig"

"$PWD"/.gitconfigZamiast tego użyj , jeśli chcesz załadować plik z bieżącego katalogu.

Po uruchomieniu powyższej komendy do .git/configpliku są dodawane następujące wiersze :

[include]
        path = /path/to/.gitconfig
kenorb
źródło
2

Wierzę, że możesz to zrobić za pomocą narzędzia hub firmy defunkt . Jest to nakładka na komendy git, która między innymi pozwala mieć GITHUB_USERi GITHUB_TOKENzmienne środowiskowe. Które zastąpią ustawienia w lokalnym .gitconfigpliku.

Następnie, aby uczynić go bezproblemowym, użytkownik wskazany jako alias alias git=hubw jego konfiguracji ZSH . Powinieneś być w stanie następnie pobrać lokalny plik, w którym ustawiasz zmienne środowiskowe i wypchnąć swoje repozytorium do świata publicznego z wszystkimi prywatnymi informacjami w takt.

** UWAGA dla użytkowników Homebrew na OSX, narzędzie można zainstalować za pośrednictwem brew install hub.

Geoff Lanotte
źródło