Kiedy używasz .git / info / exclude zamiast .gitignore do wykluczania plików?

144

Jestem trochę zdezorientowany co do zalet i wad używania .git/info/excludei .gitignorewykluczania plików.

Oba są na poziomie repozytorium / projektu, więc czym się różnią i kiedy powinniśmy użyć .git/info/exclude?

Parag
źródło

Odpowiedzi:

196

Zaletą .gitignorejest to, że w przeciwieństwie do plików można go sprawdzić w samym repozytorium .git/info/exclude. Inną zaletą jest to, że możesz mieć wiele .gitignoreplików, po jednym w każdym katalogu / podkatalogu dla specyficznych dla katalogu reguł ignorowania, w przeciwieństwie do .git/info/exclude.

Tak więc .gitignorejest dostępny we wszystkich klonach repozytorium. Dlatego w dużych zespołach wszyscy ludzie ignorują ten sam rodzaj plików przykładu *.db, *.log. Możesz mieć bardziej szczegółowe reguły ignorowania z powodu wielu .gitignore.

.git/info/excludejest dostępny tylko dla pojedynczych klonów, dlatego to, co jedna osoba ignoruje w swoim klonie, nie jest dostępne w klonie innej osoby. Na przykład, jeśli ktoś używa Eclipsedo programowania, może mieć sens, aby ten programista dodał .buildfolder do.git/info/exclude ponieważ inni deweloperzy mogą nie używać Eclipse.

Ogólnie rzecz biorąc, reguły files / ignore, które muszą być uniwersalnie ignorowane, powinny wejść .gitignore, a w przeciwnym razie pliki, które chcesz zignorować tylko w swoim lokalnym klonie, powinny wejść do.git/info/exclude

mu 無
źródło
ale idealnie powinno to znaleźć się w ~ / .gitignore zgodnie z oficjalną dokumentacją Git tutaj, git-scm.com/docs/gitignore
Devendra Swami
@DevendraSwami Nie udało mi się znaleźć konkretnego wpisu ~/.gitignorew Twoim komentarzu powyżej. Rozumiem, że reguły ignorowania mogą być na 3 poziomach - $PROJECT/.git/info/excludedla (projektu, użytkownika) specyficznych reguł ignorowania, $PROJECT/<any number of directories>/.gitignoreczyli dla specyficznych dla projektu reguł ignorowania dla dowolnego użytkownika w dowolnym miejscu (po wpisaniu), ~/.gitignore dla specyficznych dla użytkownika reguł ignorowania dla dowolnego projektu dla tego użytkownika na tej maszynie. Na podstawie celu wybierasz miejsce, w którym chcesz umieścić wpis.
mu 無
tak, masz całkowitą rację. Mój komentarz był związany z tym pytaniem stackoverflow.com/questions/59673991/…
Devendra Swami
Przepraszam za oryginalny niekompletny komentarz.
Devendra Swami
2
@ShimmyWeitzhandler, czy plik sln jest już w twoim repozytorium? Wtedy wykluczanie lub .ignore nie uniemożliwi gitowi śledzenia jego zmian. Wypróbuj jedną z następujących czynności: git rm --cached <path-name>usunie ją z repozytorium, ale zachowa lokalnie. git update-index --skip-worktree <path-name>zignoruje zmiany w pliku, ale zachowa go w repozytorium. Z ciekawości: dlaczego chcesz wykluczyć plik sln? To ważna część rozwiązania .Net, prawda?
Koen
36

Googled: 3 sposoby wykluczania plików

  1. .gitignore dotyczy każdego klonu tego repozytorium (wersjonowane, każdy będzie miał),
  2. .git/info/exclude dotyczy tylko Twojej lokalnej kopii tego repozytorium (lokalnej, nie udostępnianej innym),
  3. ~/.gitignore dotyczy wszystkich repozytoriów na Twoim komputerze (lokalnych, nie udostępnianych innym).

3. w rzeczywistości wymaga ustawienia konfiguracji na komputerze:

git config --global core.excludesfile '~/.gitignore'
LeGEC
źródło
2
Tak, też to czytałem, ale chciałem uzyskać bardziej praktyczną (rzeczywistą) perspektywę :-)
Parag,
Blog, do którego prowadzi link, omyłkowo wywołuje plik .git/info/excludes, kiedy powinien .git/info/exclude, co potwierdza dokumentacja, do której prowadzi.
mwfearnley
13
(spoiler: trzeci sposób to globalne ignorowanie komputerów poprzez ustawienie w ~ / .gitconfig)
hmijail opłakuje resignees
@hmijail: dzięki, dołączyłem twój komentarz do tej odpowiedzi
LeGEC,
12

Aby zaoferować nasze (rzeczywiste) doświadczenie: zaczęliśmy używać .git / info / exclude, kiedy musieliśmy dostosować niektóre pliki konfiguracyjne w każdym środowisku programistycznym, ale nadal chcieliśmy, aby źródło było utrzymywane w repozytorium i dostępne dla innych programistów.

W ten sposób pliki lokalne, po sklonowaniu i zmodyfikowaniu, można wykluczyć z zatwierdzeń bez wpływu na oryginalne pliki w repozytorium, ale niekoniecznie są również ignorowane w repozytorium.

Effing
źródło
4

Służy .gitignoredo ignorowania reguł specyficznych dla projektu . Użyj excludelub globalnego pliku ignorowania, aby ignorować reguły specyficzne dla twojego środowiska .

Na przykład moje globalne pliki ignorowania ignorują pliki tymczasowe generowane przez dowolny edytor, którego używam - ta reguła jest specyficzna dla mojego środowiska i może być inna dla innego programisty w tym samym projekcie (być może używają oni innego edytora). OTOH, moje .gitignorepliki projektu ignorują takie rzeczy, jak klucze API i artefakty kompilacji - te są przeznaczone dla projektu i powinny być takie same dla wszystkich w projekcie.

To pomaga?

Marnen Laibow-Koser
źródło