2009-03-17 12 views
152

Czy mogę nakazać git ignorować pliki, które zostały zmodyfikowane (usunięte), ale nie powinny być zatwierdzone?Ignorujesz zmodyfikowane (ale nie zatwierdzone) pliki w git?

Sytuacja jest taka, że ​​w repozytorium mam repozytorium, które zawiera rzeczy, które w ogóle mnie nie interesują, więc usunąłem je, aby zapobiec wyświetlaniu się w autouzupełnianiu itp. (W IDE).

Ale teraz, jeśli dodaję ten folder do .gitignore, po prostu nic się nie zmienia, wszystkie rzeczy są pokazywane jako usunięte przez status git.

Czy istnieje sposób, aby Git to zignorować?

(Alternatywnie, jak używam git-svn, mogę zatwierdzić zmiany do lokalnego git i upewnić się, że nie są przekazywane do repo SVN?)

+0

zamiast po prostu oznaczając je jako niemodyfikowana w indeksie repo, można je usunąć z indeksu całkowicie. Tak więc, chociaż nadal będziesz miał plik w twoim katalogu roboczym, indeks repo może być całkowicie usunięty, a git nawet nie zobaczy go jako istniejącego. Proszę zobaczyć link w mojej odpowiedzi poniżej. – MaurerPower

Odpowiedz

231

Sprawdź git-update-index man page i the --assume-unchanged b to i powiązane.

kiedy mam problemu zrobić to

git update-index --assume-unchanged dir-im-removing/ 

lub określony plik

git update-index --assume-unchanged config/database.yml 
+0

Działa to doskonale w przypadku zmodyfikowanych plików. Jednak po usunięciu katalogu (z "rm" lub "git rm") pliki są wyświetlane jako brakujące/usunięte w "statusie git". Myślę, że zaakceptuję to jako odpowiedź i ponownie zadam pytanie wprost o usunięte pliki. (Na początku nie wiedziałem, że była tak wielka różnica;) Dzięki! –

+3

Czy potrafisz wymienić wszystkie swoje zignorowane pliki? – Zitrax

+4

Zitrax, tak, zobacz http://stackoverflow.com/questions/2363197/ –

6

gąsienicowe pliki nie mogą być ignorowane, więc najpierw musisz usunąć je z indeksu. Dodaj .gitignore, który zignoruje katalogi, których nie chcesz, a następnie usuń je i usuń wszystkie marudery o numerze git rm --cached.

+0

Hm, próbuję tego, ale potem wszystkie pliki są wymienione jako usunięte. Czy powinienem to zrobić, a polecenie --cached spowoduje, że nie zostanie ono przekazane pilotom? A może zrobiłem coś takiego. źle? Najważniejsze dla mnie nie jest uszkodzenie zdalnego repozytorium (svn). –

+1

Nie można zatwierdzić niczego, co nie rozpoczyna się w indeksie. git rm --cached wszystko, czego nie chcesz zatwierdzić, a następnie dodaj plik .gitignore lokalnie, który ma "*" w nim. Teraz, bez względu na to, ile dodasz git, już nigdy nie zobaczysz tych plików w indeksie. –

+0

Ah, myślę, że rozumiem - teraz w podręczniku ..Usuwa tylko rzeczy z indeksu i pozostawia tylko drzewo robocze. Nie jestem pewien, czy czegoś brakuje, ale AFAIS Szukam odwrotności, usuwając go z drzewa roboczego bez dotykania indeksu. Czy mogę w jakiś sposób z tego skorzystać? –

4

Co zwykle zrobić jest

git zapas

git cokolwiek-else

git stash zastosowanie

git stash wyraźny

+9

fwiw możesz również "git stash pop", aby zrobić te dwie ostatnie naraz (chociaż "git stash clear" wyczyści WSZYSTKIE wpisy, jeśli tego chcesz). – Groxx

36

Nowsza i lepszym rozwiązaniem jest git update-index --skip-worktree które nie zostaną utracone na twardym resecie lub nowa zmiana z pociągnięcia.

Zobacz stronę człowiek na http://schacon.github.com/git/git-update-index.html

oraz porównanie na http://fallengamer.livejournal.com/93321.html

+8

Jedną wadą jest to, że kiedy modyfikacje pliku zostały ukryte za pomocą 'skip-worktree', znalezienie tych plików jest trochę uciążliwe. Jedyny znany mi sposób to 'git ls-files -v | grep -v '^ H''. Ponadto wiele narzędzi GUI nie wie o tej funkcji i może powodować zabawne błędy, np. "Checkout" kończy się niepowodzeniem z powodu "ukrytych" zmodyfikowanych plików. – sleske

+0

+1 sleske, ponieważ to polecenie zapisało mnie po tym, jak "przypadkowo" pominąłem plik! –

3

użyć tego kodu

git update-index --assume-unchanged file-name 
+0

Naprawdę interesujące. Muszę użyć passorda w moim projekcie maven, ale nie chcę go publikować w repozytorium git, więc umieszczam dla niego obiekt zastępczy bez wartości w lokalnych, właściwościach, zatwierdzam go, potem wstawiam hasło, ale zaznaczam plik niezmieniony z sugerowanym poleceniem. Tak więc hasło nie jest publikowane. –