Ignoruj pliki, które zostały już przekazane do repozytorium Git [duplikat]

To pytanie ma już odpowiedź tutaj:

Mam już zainicjowane repozytorium Git, do którego dodałem plik .gitignore. Jak odświeżyć indeks plików, aby ignorowane pliki były ignorowane?

Author: dreftymac, 2009-07-16

21 answers

Aby usunąć pojedynczy plik, który został już dodany/zainicjowany do repozytorium, tj., przestań śledzić plik, ale nie usuwaj go z systemu Użyj: git rm --cached filename

Aby usunąć każdy plik, który jest teraz w twoim .gitignore:

Najpierw Zatwierdź wszelkie zaległe zmiany kodu , a następnie uruchom polecenie:

git rm -r --cached .

Usuwa zmienione pliki z indeksu (staging area), a następnie uruchom:

git add .

Commit it:

git commit -m ".gitignore is now working"

Aby cofnąć git rm --cached filename, Użyj git add filename.

Upewnij się, że zatwierdzisz wszystkie ważne zmiany przed uruchomieniem git add . W przeciwnym razie utracisz wszelkie zmiany w innych plikach.

 3707
Author: takeshin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-16 23:48:27

Jeśli próbujesz zignorować zmiany w pliku, który jest już śledzony w repozytorium (np. dev.Plik Właściwości, który trzeba by zmienić w środowisku lokalnym, ale nigdy nie chcesz sprawdzać tych zmian), niż to, co chcesz zrobić, to:

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

Jeśli chcesz zacząć od nowa śledzić zmiany

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

Zobacz strona podręcznika Git-update-index(1) .

Spójrz również na opcje skip-worktree i no-skip-worktree dla update-index, jeśli potrzebujesz tego persist past a Git-reset (via)


Update: Ponieważ ludzie pytają, oto wygodny (i zaktualizowany od komentarza poniżej) alias, aby zobaczyć, które pliki są obecnie " ignorowane "(--assume-niezmienione) w lokalnym obszarze roboczym

$ git config --global alias.ignored = !git ls-files -v | grep "^[[:lower:]]"
 529
Author: dyodji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:59

Aby odznaczyć plik, który został już dodany/zainicjowany do repozytorium, tj. przestać śledzić plik, ale nie usunąć go z systemu, Użyj: git rm --cached filename

 351
Author: pagetribe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-14 23:55:15

Yes - .gitignore system ignoruje tylko pliki, które nie są aktualnie kontrolowane przez git.

Tzn. jeśli dodałeś już plik o nazwie test.txt używając git-add, dodanie test.txt do .gitignore nadal spowoduje śledzenie zmian w test.txt.

Musisz najpierw git rm test.txt I zatwierdzić tę zmianę. Tylko wtedy zmiany test.txt zostaną zignorowane.

 78
Author: Antony Stubbs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-02 17:44:37

Usuń końcowe białe znaki .gitignore

Upewnij się również, że nie masz końcowych białych znaków w swoim .gitignore. Dotarłem do tego pytania, ponieważ szukałem odpowiedzi, a potem miałem dziwne uczucie, że powinienem otworzyć edytor zamiast po prostu kotować .gitignore. Usunąłem jedną dodatkową spację z końca i poof działa teraz:)

 50
Author: MikeJansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-02 15:59:49

Wykonałem te kroki

git rm -r --cached .
git add .
git reset HEAD

Po tym, git usuwa wszystkie pliki (*.swp w moim przypadku), które powinny być ignorowane.

 40
Author: Orlando,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-15 07:22:58

Jeśli chcesz zatrzymać śledzenie pliku bez usuwania pliku z lokalnego systemu, który wolę ignorować plik config/database.yml. Po prostu spróbuj:

git rm --cached config/database.yml
# this will delete your file from git history but not from your local system.

Teraz dodaj ten plik do .gitignore i zatwierdź zmiany. I od teraz wszelkie zmiany wprowadzone w config / database.yml nie będzie śledzony przez git.

$ echo config/database.yml >> .gitignore

Dzięki

 37
Author: przbadu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-17 04:01:12

Aby usunąć tylko kilka konkretnych plików ze śledzonych:

git update-index --assume-unchanged path/to/file

Jeśli kiedykolwiek chcesz zacząć go śledzić ponownie:

git update-index --no-assume-unchanged path/to/file                      
 28
Author: Mark Salvatore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-23 15:27:13

Jak mówi dav_i, aby zachować plik w repo, a jednocześnie usunąć go ze zmian bez tworzenia dodatkowego commita, możesz użyć:

git update-index --assume-unchanged filename
 26
Author: Iman Mohamadi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 07:21:44

Złożone odpowiedzi wszędzie!

Po prostu użyj następującego

git rm -r --cached .

Usunie pliki, które próbujesz zignorować z origin, a nie z master na komputerze!

Potem po prostu zaangażuj się i pchaj!

 26
Author: Ahmad Awais,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-19 05:38:19

Nie wiedząc do końca, co zrobiła Komenda "odpowiedz", uruchomiłem ją, ku mojemu przerażeniu. Rekurencyjnie usuwa każdy plik z twojego repo git.

Stackoverflow na ratunek... Jak przywrócić " git rm-r ."?
git reset HEAD

Udało mi się, ponieważ miałem niezakontraktowane pliki lokalne, których nie chciałem nadpisywać.

 24
Author: averydev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:43

Jest jeszcze jedna sugestia może dla takich wolnych facetów jak ja=) Wrzuć .gitignore plik do głównego repozytorium nie w .Git folder. Zdrowie!

 23
Author: Olga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-27 12:03:53

Żadna z odpowiedzi nie zadziałała.

Zamiast:

  1. Przenieś plik z katalogu kontrolowanego przez git
  2. Sprawdź usunięcie w git
  3. Przenieś plik z powrotem do katalogu kontrolowanego przez git

Po przeniesieniu pliku z powrotem, git zignoruje go.

Działa również z katalogami!

 22
Author: Hunter S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-17 16:23:56

Kolejnym problemem, jaki miałem, było umieszczenie komentarza w linii.

tmp/*   # ignore my tmp folder (this doesn't work)

To działa

# ignore my tmp folder
tmp/
 20
Author: kindahero,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-06 13:14:59

Jeśli pliki są już w kontroli wersji, musisz je usunąć ręcznie.

 18
Author: Aragorn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-16 19:28:57

Dzięki twojej odpowiedzi, udało mi się napisać ten mały jednoślad, aby go poprawić. Sprawdziłem to na moim .gitignore i repo, i nie miał żadnych problemów, ale jeśli ktoś widzi jakieś rażące problemy, proszę o komentarz. To powinno git rm -r --cached z .gitignore:

Cat $(git rev-parse --show-toplevel)/.gitIgnore | sed" s//$ | | "| grep-v "^ # "/ xargs-L 1-I {} find $(git rev-parse --show-toplevel) -name "{} " / xargs-L 1 git rm-r --cached

Zauważ, że dostaniesz dużo fatal: pathspec '<pathspec>' did not match any files. To tylko dla plików, które nie zostały zmodyfikowane.

 13
Author: umop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-29 15:00:33

Znalazłem dziwny problem z .gitignore. Wszystko było na swoim miejscu i wydawało się prawidłowe. Jedyny powód, dla którego mój .gitignore był "ignorowany", że końcówka linii była w formacie Mac (\r). Więc po zapisaniu pliku z poprawnym zakończeniem linii (w vi używając :set FF = unix) wszystko działało jak czar!

 10
Author: Johannes Vetter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-02 09:56:39

Innym problemem nie wspomnianym tutaj jest to, czy stworzyłeś swój .gitignore w Notatniku Windows może wyglądać jak bełkot na innych platformach, jak się dowiedziałem. Kluczem jest upewnienie się, że kodowanie jest ustawione na ANSI w notatniku, (lub zrobić plik na Linuksie tak, jak ja).

Z mojej odpowiedzi tutaj: https://stackoverflow.com/a/11451916/406592

 9
Author: Matt Parkins,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:39

Na moim serwerze linux server (nie jest to prawda na moim lokalnym dev mac), katalogi są ignorowane tak długo, jak nie dodam gwiazdki:

Www / archives/ *

Nie wiem dlaczego, ale przez to straciłem kilka godzin, więc chciałem się podzielić...

 8
Author: ndemoreau,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-15 08:33:19

Należy również pamiętać o tym, że jeśli .gitignore nie ignoruje nie śledzonych plików, nie należy dodawać komentarzy w tej samej linii, co ignorowane pliki. Więc to jest w porządku

# ignore all foo.txt, foo.markdown, foo.dat, etc.
foo*

Ale to nie zadziała:

foo*   # ignore all foo.txt, foo.markdown, foo.dat, etc.

.gitignore interpretuje ten drugi przypadek jako " ignoruj pliki o nazwie "foo* # ignore all foo.txt, foo.markdown, foo.dat, etc.", których oczywiście nie masz.

 6
Author: Gabriel Perdue,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-19 22:52:59

Jeśli chcesz przestać śledzić wiele ignorowanych plików, możesz połączyć kilka poleceń:

git ls-files -i --exclude-standard | xargs -L1 git rm --cached

To przestanie śledzić ignorowane pliki. Jeśli chcesz usunąć Pliki z systemu plików, nie używaj opcji --cached. Możesz również określić folder, aby ograniczyć wyszukiwanie, na przykład:

git ls-files -i --exclude-standard -- ${FOLDER} | xargs -L1 git rm

 4
Author: Etherealone,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-20 06:18:57