Zignorować zmodyfikowane (ale nie zatwierdzone) pliki w git?

182

Czy mogę powiedzieć gitowi, aby zignorował pliki, które zostały zmodyfikowane (usunięte), ale nie należy ich zatwierdzać?

Sytuacja polega na tym, że mam repozytorium w repozytorium, które zawiera rzeczy, które w ogóle mnie nie interesują, więc usunąłem go, aby nie pojawiał się w autouzupełnianiu itp. (W IDE).

Ale teraz, jeśli dodam ten folder do .gitignore, po prostu nic się nie zmieni, wszystkie rzeczy zostaną pokazane jako usunięte według statusu git.

Czy istnieje sposób, aby git zignorował to w obu przypadkach?

(Alternatywnie, gdy używam git-svn, czy mogę zatwierdzić zmiany w lokalnym git i upewnić się, że nie są one przekazywane do repozytorium svn?)

Sam
źródło
zamiast po prostu oznaczać je jako niezmodyfikowane w indeksie repo, możesz chcieć całkowicie usunąć je z indeksu. Więc chociaż nadal będziesz mieć plik w katalogu roboczym, indeks repo można całkowicie usunąć, a git nawet go nie zobaczy. Proszę zobaczyć link w mojej odpowiedzi poniżej.
MaurerPower

Odpowiedzi:

274

sprawdź stronę podręcznika git-update-index i bit --assume-niezmieniony i powiązane.

kiedy mam twój problem, robię to

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

lub określony plik

git update-index --assume-unchanged config/database.yml
csmosx
źródło
3
Czy potrafisz jakoś wymienić wszystkie zignorowane pliki?
Zitrax
21
Możesz odzyskać pliki za pomocągit update-index --no-assume-unchanged config/database.yml
Denis Kniazhev
1
Zobacz odpowiedź Dave'a L poniżej, aby uzyskać nowsze rozwiązanie bez niektórych niedociągnięć --assume-unchanged.
Ben Challenor
2
Czy można dodać to do pliku konfiguracyjnego repozytorium, zamiast uruchamiać to polecenie ręcznie za każdym razem?
Tim Boland
1
Czy będzie wyglądać jak zmodyfikowany do następnego zatwierdzenia? Nie chcę, aby zakładano, że pozostanie niezmieniona na zawsze.
Pranav Nandan
41

Nowszą i lepszą opcją jest, git update-index --skip-worktreektóra nie zostanie utracona podczas twardego resetu lub nowej zmiany po pociągnięciu.

Zobacz stronę podręcznika pod adresem http://schacon.github.com/git/git-update-index.html

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

Dave L.
źródło
9
Jedną z wad jest to, że po ukryciu modyfikacji pliku skip-worktreeznalezienie tych plików jest nieco kłopotliwe. 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, jeśli np. checkoutZawiedzie z powodu „ukrytych” zmodyfikowanych plików.
sleske,
Nigdy nie byłem w stanie zrozumieć ŻADNEGO pliku git doc. Więc to niewiele pomaga. (Każdy plik doc zakłada, że ​​rozumiesz subtelności każdego innego pliku doc!)
Scott Biggs,
7

Użyj tego kodu

git update-index --assume-unchanged file-name
Sujiraj R.
źródło
1
Naprawdę interesujące. Muszę użyć hasła w moim projekcie maven, ale nie chcę publikować go w repozytorium git, więc umieszczam symbol zastępczy bez wartości w lokalnych właściwościach, zatwierdzam go, a następnie wstawiam hasło, ale zaznaczam plik niezmieniony za pomocą sugerowanego polecenia. Więc hasło nie jest publikowane.
Stefano Scarpanti
6

Śledzonych plików nie można zignorować, dlatego najpierw trzeba je usunąć z indeksu. Dodaj, .gitignorektóry ignoruje katalogi, których nie chcesz, a następnie usuń je i usuń maruderów git rm --cached.

John Feminella
źródło
1
Hm, próbuję tego, ale wszystkie pliki są wymienione jako usunięte. Czy powinienem to zrobić, a pamięć podręczna spowoduje, że nie będzie ona przekazywana do pilotów? Czy dostałem coś. źle? Najważniejsze dla mnie nie jest uszkodzenie zdalnego repozytorium (svn).
1
Nie możesz popełnić niczego, co nie zaczyna się w twoim indeksie. git rm - zapisał w pamięci podręcznej wszystko, czego nie chcesz zatwierdzać, a następnie dodaj plik .gitignore lokalnie, który zawiera „*”. Teraz, bez względu na to, ile dodasz, nigdy więcej nie zobaczysz tych plików w indeksie.
John Feminella,
Ach, myślę, że rozumiem - teraz w pamięci podręcznej .. Usuwa tylko rzeczy z indeksu i pozostawia działające drzewo w spokoju .. Nie jestem pewien, czy coś mi brakuje, ale AFAIS Szukam czegoś przeciwnego , usuwając go z działającego drzewa bez dotykania indeksu. Czy mogę go w jakiś sposób wykorzystać do tego celu?
6

Zwykle robię to

git skrytka

git cokolwiek innego

zastosowanie git stash

git ukryć

Walter
źródło
10
fwiw możesz także „git stash pop”, aby zrobić te dwa ostatnie jednocześnie (chociaż „git stash wyczyść” wyczyści WSZYSTKIE wpisy skrytki, jeśli chcesz).
Groxx