.gitignore wyklucza określony plik

101

Próbuję użyć .gitignorepliku do wykluczenia templates.jsznajdującego się w public/app/folderze. Mój .gitignoreplik wygląda następująco:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

Ale kiedy sprawdzam Git Gui, templates.jsplik jest nadal w nim wyświetlany. Jak mogę konkretnie wykluczyć plik za pomocą .gitignore?

user1995781
źródło
2
Czy to oznacza, że ​​plik został już wcześniej dodany do repozytorium? .gitignoreignoruje tylko treść do dodania.
Willem Van Onsem
2
@CommuSoft Tak, zostało wcześniej dodane do repozytorium. Jak więc mogę to teraz wykluczyć? Czy mój sposób postępowania jest .gitignoreprawidłowy?
user1995781

Odpowiedzi:

163

W przeciwieństwie do tego, co może sugerować nazwa „ignoruj”. .gitignorejest konsultowany tylko podczas tworzenia git addplików: innymi słowy, plik już dodany do (indeksu) repozytorium nie zostanie wykluczony na podstawie rozszerzenia .gitignore.

Najpierw lepiej zmodyfikuj .gitignoretak, aby plik nie był już dodawany. Dodaj następujący wiersz do .gitignorepliku:

public/app/template.js

Następnie musisz wykluczyć plik z repozytorium. Prawdopodobnie nie chcesz usuwać pliku z systemu plików, możesz to zrobić za pomocą:

git rm --cached public/app/template.js

--cachedFlagi zapewnia, że plik nie zostanie usunięty z systemu plików. (Jeśli nie jest to ważne, możesz użyć git rm public/app/template.js, ale spowoduje to usunięcie pliku ).

tło

Przyczyną .gitignorenieużywanego proaktywnie jest to, że czasami możesz chcieć zastąpić .gitignore. Załóżmy na przykład, że nie chcesz śledzić *.logplików, możesz określić *.logw pliku .gitignore. Ale jeśli istnieje konkretny, który chcesz śledzić, możesz go dodać git add -f some.log. Te -fsiły flag git, aby dodać plik.

Willem Van Onsem
źródło
2
ratownik
Nie wiedziałem, że muszę najpierw usunąć dodany plik, a następnie zignorować go przez gitignore. :-)
Raheel Khan
23

Po jednokrotnym „dodaniu” pliku do repozytorium git, będzie on nadal śledzony, niezależnie od tego, czy jest wymieniony w pliku .gitignore.

Domyślam się, że wcześniej dodałeś plik template.js, w takim przypadku zmiany będą śledzone, dopóki nie usuniesz go z repozytorium. Gdy plik zostanie usunięty z repozytorium, zostanie poprawnie zignorowany przez plik .gitignore.

Sposobem na usunięcie pliku z repozytorium git (wiersz poleceń) bez usuwania jest

git rm --cached FILENAME

Kiedy już to zrobisz i spróbujesz zatwierdzić plik w swoim gitignore, to tego nie zrobi.

Zauważ, że jeśli specjalnie dodasz plik, który masz w swoim gitignore, ręczne dodanie tego pliku nadpisuje gitignore.

BTownTKD
źródło
Dzięki kochanie, „git rm --cached NAZWA PLIKU” działał jak
czarujący
12

Jeśli już śledzisz plik ( git addna nim i git commit), .gitignorenie pomoże.

Uważam, że chcesz zatrzymać śledzenie pliku, a następnie użyć go, .gitignoreaby go wykluczyć. Aby zatrzymać śledzenie pliku, ale go zachować, użyj:

git rm --cached <file>

Ross
źródło
nie dv, ale myślę, że być może powinieneś lepiej dobrać słowa. trzymanie go w repozytorium jest trochę w przeciwieństwie do trzymania go w lokalnym systemie plików . Repozytorium nie jest mapowane w systemie plików ...
Willem Van Onsem
@CommuSoft Naprawiono z pewnym zadowoleniem, nie byłem zbyt ostrożny, ponieważ inni odpowiedzieli lepiej. Dzieki za sugestie.
Ross
7

W takim przypadku możesz zatrzymać śledzenie za templates.jspomocą

git rm --cached public/app/templates.js

Jak wyjaśnili inni, .gitignoreignoruje tylko zawartość do dodania. Na przykład, jeśli często używasz git add .i masz templates.jsw swoim .gitignore, git go nie doda.

Thomas Hughes
źródło