Stosowanie .gitignore do zatwierdzonych plików


436

Popełniłem mnóstwo plików, które chcę teraz zignorować. Jak mogę powiedzieć gitowi, aby teraz ignorował te pliki z przyszłych zatwierdzeń?

EDYCJA: Chcę je również usunąć z repozytorium. Są to pliki tworzone po każdej kompilacji lub w celu wsparcia narzędzi dla użytkownika.


1
możliwy duplikat pliku
— .gitignore

8
@Wooble Odpowiedź może być podobna, ale to pytanie dokładnie opisuje problem, z którym się spotkałem i musiałem go rozwiązać.
— rjmunro

1
Oto odpowiedź, która bezpośrednio odnosi się do pytania tytułowego z minimalnymi zmianami w repozytorium git: stackoverflow.com/a/26245961/3543437
— kayleeFrye_onDeck

Odpowiedzi:


471

12
Istnieje jednak wiele plików. Nie chcę tego robić dla każdego użytkownika
— user880954

1
Czy pliki znajdują się w jakichś popularnych katalogach? Jeśli nie, problem sprowadza się do pytania o użycie powłoki, a nie do git.
— Matt Ball

12
Musi istnieć tryb „Zapomniałem dodać mój .gitignore, aż do mojego początkowego zatwierdzenia”.
— Luke Puplett

9
Odpowiedź jest poniżej tego.
— Lopsided

3
Poprosił mnie o dodanie flagi -r, aby móc to zrobić.
— Vishal Gulati,

599

Po edycji, .gitignoreaby dopasować zignorowane pliki, możesz zrobić, git ls-files -ci --exclude-standardaby zobaczyć pliki, które znajdują się na listach wykluczeń; możesz wtedy zrobić

//On Linux:
git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached
//On Windows:
for /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
//On mac
alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached"

usunąć je z repozytorium (bez usuwania ich z dysku).

Edycja : Możesz również dodać to jako alias w pliku .gitconfig, abyś mógł go uruchomić w dowolnym momencie. Po prostu dodaj następujący wiersz w sekcji [alias] (zmodyfikuj w razie potrzeby w systemie Windows lub Mac):

apply-gitignore = !git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached

(The -r Flaga in xargszapobiega git rmuruchomieniu na pustym wyniku i wydrukowaniu komunikatu o jego użyciu, ale może być obsługiwana tylko przez GNU findutils. Inne wersje xargsmogą, ale nie muszą, mieć podobną opcję.)

Teraz możesz po prostu wpisać git apply-gitignoreswoje repozytorium, a zrobi to za Ciebie!


10
Myślę, że xargs na Maca nie ma -r ... lub mój jest wadliwy / stary, nie wiem ... i dlaczego !wcześniej git? cóż ... mój pracował jako alias apply-gitignore="git ls-files -ci --exclude-standard -z | xargs -0 git rm --cached". tks!
— Felipe Sabino,

18
W systemie Windowsfor /F "tokens=*" %a in ('git ls-files -ci --exclude-standard') do @git rm --cached "%a"
— Luke Puplett

To właśnie usunęło moje pliki .gitignore, a nie pliki, które chciałem zignorować, które były wymienione w plikach .gitignore - czy o to chodziło?
— Hippyjim

@Hippyjim, jeśli pliki są już zatwierdzone (nawet jeśli były wymienione w .gitignore), a .gitignore nie jest jeszcze zatwierdzone, to byłby to oczekiwany wynik, w przeciwnym razie nie jestem pewien, co się dzieje w twoim przypadku.
— Jonathan Callen

1
Dla użytkowników komputerów Mac -rjest domyślny i nie jest akceptowany przez wersje BSD. Więc usuń -r.
— Weishi Zeng

136

pozostawić plik w repozytorium, ale zignorować przyszłe zmiany:

git update-index --assume-unchanged <file>

i cofnąć to:

git update-index --no-assume-unchanged <file>

aby dowiedzieć się, które pliki zostały ustawione w ten sposób:

git ls-files -v|grep '^h'

podziękowania za oryginalną odpowiedź na http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/


1
Chronial ma świetną odpowiedź na robienie tego rekurencyjnie dla katalogu: stackoverflow.com/a/16346756/1101076
— jordan314

Chciałem zatwierdzić konfigurację IDE, ale nie śledzić niepotrzebnych zmian. To działa, choć nie jestem pewien, czy zadziała dla innych, którzy sprawdzą repozytorium. Można to połączyć, git ls-files -ci --exclude-standard -z | xargs -0 git update-index --assume-unchangedjeśli to pomaga.
— dlamblin,

7
To jedyna odpowiedź, która dokładnie odpowiada pytaniu tytułowemu. DOSKONAŁY! Większość tych innych odpowiedzi niepotrzebnie zadzierała z plikami.
— kayleeFrye_onDeck

1
To jest dokładnie właściwa odpowiedź na pytanie. Użycie poleceń typu „ git rm --cachedusunie” plik z repozytorium, co nie zaspokoi potrzeby quizera. Dziękuję Ci. Bardzo to doceniam. Twoja odpowiedź bardzo mi pomaga.
— ramwin

88

Upewnij się, że Twoje repozytorium jest najnowszą wersją

  1. Edytuj, .gitignorejak chcesz
  2. git rm -r --cached .
  3. git add .

następnie popełnij jak zwykle


14
To powinna być zaakceptowana odpowiedź, ponieważ pytanie wyraźnie mówiło, że jest wiele plików do usunięcia.
— nbeuchat

3
Pamiętaj, że krok 2 może zająć trochę czasu, jeśli masz duże repozytorium.
— brainbag

Doprowadziło to do usunięcia wszystkich plików z indeksu! To mnie uratowało: git reset HEAD(Pamiętaj, aby ukryć wszelkie zmiany)
— aksh1618

2
Krok 2 usuwa wszystko, tak, ale krok 3 powinien przeczytać je wszystkie, z wyjątkiem tych, które zawiodły z powodu .gitignore.
— ojchase

11

Stare pytanie, ale niektórzy z nas są w git-posh(PowerShell). Oto rozwiązanie tego problemu:

git ls-files -ci --exclude-standard | foreach { git rm --cached $_ }

0

Wykonaj następujące kroki:

  1. Dodaj ścieżkę do gitignorepliku

  2. Uruchom to polecenie

    git rm -r --cached foldername
    
  3. zatwierdzaj zmiany jak zwykle.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.