Tymczasowo wyśledzić pliki z git


450

Mam skonfigurowanego lokalnego git na moim komputerze. Kiedy zainicjowałem git, dodałem wstępnie skompilowane biblioteki lib i binarne. Jednak teraz, podczas opracowywania, nie chcę sporadycznie rejestrować tych plików. Nie chcę usuwać tych plików z repozytorium. Czy jest jakiś sposób, aby nie śledzić tych plików, dopóki nie ukończę programowania. (Myślę, że nie mogę użyć .gitignore, ponieważ działa tylko dla tych plików, które nie są w git. Chcę tymczasowo wyłączyć śledzenie plików.)



Odpowiedzi:


723

git update-index powinien robić, co chcesz

To powie git, że chcesz zacząć ignorować zmiany w pliku
git update-index --assume-unchanged path/to/file

Gdy chcesz ponownie zacząć śledzić
git update-index --no-assume-unchanged path/to/file

Dokumentacja Github: indeks aktualizacji


3
Wreszcie polecenie, które faktycznie działa dla mojego przypadkowo popełnionego pliku dev, dzięki :)
Richard de Wit

15
Dlaczego nie git rm -r --cached <plik>?
Ehsan

23
@Ehsan, jak się wydaje git rm --cached, doprowadzi do usunięcia lokalnych kopii na innych komputerach, na których ten sam oddział jest sprawdzany, przy następnym ściągnięciu. Zobacz arlocarreon.com/blog/git/…, a zwłaszcza dyskusję poniżej.
mit

3
Nie działa dla mnie, gdy wprowadzam zmiany w pliku, jest on nadal dodawany do uwzględnionych zmian. Mogę wykluczyć, ale w pewnym momencie prawdopodobnie zostanie dodany przypadkowo.
MrFox,

8
założenie, że niezmienione nie było przeznaczone do tego celu. Może chcę przeczytać ten wątek
Appy

264

możesz zachować swoje pliki bez śledzenia

git rm -r --cached <file>

dodaj swoje pliki za pomocą

git add -u

pchają lub robią, co chcesz.


19
To właściwie właściwa odpowiedź według: git-scm.com/book/en/v2/…
Ehsan

git rm --cached .DS_Store następnie drukuje rm '../.DS_Store'I plik lokalny jest usuwany ??! ( git version 2.6.4 (Apple Git-63))
Weishi Zeng


4
To nie jest poprawna odpowiedź, ponieważ spowoduje to usunięcie pliku ze źródła. OP chce zignorować lokalne zmiany tego pliku, a nie całkowicie usunąć jego śledzenie
cjsimon

2
UWAGA: usunie również pliki, które chcesz wyśledzić. Rozwiązaniem jest skopiowanie gdzieś wszystkich plików i skopiowanie ich z powrotem po zatwierdzeniu.
psad

111
git rm --cached

Jednak przede wszystkim nie powinieneś kompilować plików binarnych i zewnętrznych zależności. Zamiast tego użyj narzędzia takiego jak Bundler.


2
Nie zapomnij opcji -r (rekurencyjna) dla katalogów: git rm -r --cached
Anatoliy Shuba


7

Git-book wspomina o tym w sekcji 2.4: „Cofanie rzeczy”. Zasadniczo musisz przywrócić stan indeksu niektórych plików z powrotem do stanu HEAD, czyli do stanu ostatniego pobrania (lub zatwierdzenia). Spowoduje to cofnięcie przemieszczania pliku do bieżącego indeksu. Poleceniem dla tego zadania jest git reset. [1]

Tak więc polecenie, które musisz wykonać to:

git reset HEAD /path/to/file

Nowsze wersje git (wydaje mi się, że od wersji 1.6) dają to polecenie (i wiele innych) jako wskazówkę podczas wykonywania git status. Te wersje są bardzo przyjazne dla użytkownika. Osobista wskazówka: jeśli wystawiasz tylko kilka plików, użyjgit add -i . Spowoduje to uruchomienie interaktywnego narzędzia inscenizacji, które sprawia, że ​​jest to szczególnie łatwe. Również bardzo polecam przeczytanie książki, ponieważ jest ona bardzo wyraźna na temat używania git w praktycznych sytuacjach.

[1] http://www.git-scm.com/book


Zgadzam się, że git reset [file]jest to najprostszy sposób na wycofanie plików.
Spectral

18
Cofanie i rozpakowywanie to różne rzeczy
Jaime Sangcap,

6

Brak odpowiedzi na pierwotne pytanie. Ale to może komuś pomóc.

Aby zobaczyć dokonane zmiany ( wiedzieć, które pliki są oznaczone jako --assume-niezmienione )

git ls-files -v

Wynikowa lista plików będzie miała prefiks z jednym znakiem (np. H lub h) Jeśli jest to mała litera (tj. H), plik został oznaczony --assume-niezmieniony


5

Zakładam, że pytasz, jak usunąć WSZYSTKIE pliki w folderze kompilacji lub folderze bin, zamiast wybierać poszczególne pliki osobno.

Możesz użyć tego polecenia:

git rm -r -f /build\*

Upewnij się, że znajdujesz się w katalogu nadrzędnym katalogu kompilacji.
To polecenie rekurencyjnie „usunie” wszystkie pliki znajdujące się w folderach bin / lub build /. Przez słowo „usuń” rozumiem, że git będzie udawał, że te pliki są „usuwane”, a te pliki nie będą śledzone. Git naprawdę zaznacza te pliki w trybie usuwania.

Upewnij się, że masz .gitignore gotowy na nadchodzące zmiany.
Dokumentacja: git rm


1

git reset [plik]

Pobierz plik z obszaru przejściowego do katalogu roboczego

Często zapominam dodać moduły węzłów do pliku .gitignore, co rozwiązuje ten problem.


1

To zadziałało dla mnie

git reset HEAD „nazwa pliku”


1

Aby usunąć wszystkie pliki Unrack. Wypróbuj to polecenie terminala

 git clean -fdx

Usunie pliki z dysku, a nie z historii git.
Leonardo

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.