„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ę:
Rozszerzenia zmienne środowiskowe, np. $HOMENie są obsługiwane. (Rozbudowa ~pojawiła się w Git 1.7.10.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.
Jeśli git nie może znaleźć pliku docelowego, dyskretnie ignoruje błąd. Wydaje się, że jest to zgodne z projektem.
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).
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.
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 .
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.
( 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.
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.
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.
~/.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.Odpowiedzi:
Git (1.7.10+) obsługuje teraz tę składnię w
.gitconfig
: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ę:
Rozszerzenia zmienne środowiskowe, np.
$HOME
Nie są obsługiwane. (Rozbudowa~
pojawiła się w Git 1.7.10.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.~/.gitconfig
Może mieć:i
subdir/gitconfig
może mieć:... co spowoduje
subdir/nested_subdir/gitconfig
załadowanie.Jeśli git nie może znaleźć pliku docelowego, dyskretnie ignoruje błąd. Wydaje się, że jest to zgodne z projektem.
źródło
~
. dzieje się tak, ponieważ plik .gitconfig nadal musi znajdować się we~/.gitconfig
względnej ścieżce w konfiguracji, co oznacza~
...~
/$HOME
jest w rzeczywistości odgit describe --contains 4c0a89fc
->v1.7.10.2~12^2
(tj.v1.7.10.2
Lub później), godne uwagi, ponieważ wydaje się, że Debian 7 i Ubuntu Quantal zostaną wydane zv1.7.10.4
.--global
,--local
lub--file
), chyba że wyraźnie powiedział, ze--includes
(jakgit config --global --includes --list
).Aktualizacja 2012:
Zobacz Mike'a Morearty „s odpowiedź :
Obejmuje
Nie sądzę.
Wolę umieścić to ustawienie w
~/.gitconfig
plikuW 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:
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.
W
.gitattributes
(lub.git/info/a..
) użyciu:W pliku .config repo:
( 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
~/.gitconfig
pliku 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 )
źródło
Możesz załadować go z wiersza poleceń:
"$PWD"/.gitconfig
Zamiast tego użyj , jeśli chcesz załadować plik z bieżącego katalogu.Po uruchomieniu powyższej komendy do
.git/config
pliku są dodawane następujące wiersze :źródło
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_USER
iGITHUB_TOKEN
zmienne środowiskowe. Które zastąpią ustawienia w lokalnym.gitconfig
pliku.Następnie, aby uczynić go bezproblemowym, użytkownik wskazany jako alias
alias git=hub
w 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
.źródło