2014-10-04 9 views
11

Jakiś czas temu założyłem mój plik .gitignore do nie śledzić folder my_folder z:plik ścieżki wewnątrz ignorowane katalog

my_folder/ 

Teraz chcę śledzić tylko dany plik wewnątrz wspomnianego folderu o nazwie my_file.md. Po dokonaniu .gitignore wyglądać następująco:

my_folder/ 
!my_folder/my_file.md 

i sprawdziany:

git status 

plik nie pojawi się jako zmianę zostać popełnione.

Co robię źle?


Dodaj

Próbuję zmienić mój plik .gitignore do:

my_folder/* 
!my_folder/my_file.md 

jak poradził ale plik jest nadal nie pokazuje się jako zmianę popełnić po git status. Czy muszę zresetować coś?


Dodaj 2

Próbuję dodać plik z git add my_folder/my_file.md zwrotów:

The following paths are ignored by one of your .gitignore files: 
my_folder/my_file.md 
Use -f if you really want to add them. 
fatal: no files added 

Komenda git check-ignore -v my_folder/my_file.md daje:

.gitignore:1:my_folder/* my_folder/my_file.md 
+1

Dupe - ale krótką odpowiedzią jest użycie "my_folder/*" http://stackoverflow.com/questions/5533050/gitignore-exclude-folder- but-include-specific-subfolder –

+0

Dzięki @AndrewC, próbowałem tego, ale nadal nie działa. Nie jestem pewien, co robię źle. – Gabriel

+2

Ponieważ * naprawdę * chcesz dodać * my_folder/my_file.md * dlaczego nie użyć flagi '-f' zgodnie z poleceniem? – PSkocik

Odpowiedz

14

Aby dodać do ".gitignore exclude folder but include specific subfolder" jeden dobry sposób na debugowanie t plik .gitignore wąż jest użycie git check-ignore (GIT 1.8.4+):

git check-ignore -v my_folder/my_file.md 

będzie zobaczyć nadal jest ignorowane, ponieważ reguły my_folder/.

To dlatego nie jest możliwe, aby ponownie włączyć plik czy katalog nadrzędny tego pliku jest wykluczona (*)
(*., Chyba że zostaną spełnione pewne warunki w git 2.?+ zobacz poniżej)

Dlatego właśnie ignorowanie plików w tym folderze (my_folder/*, zamiast samego folderu) pozwala je wykluczyć.

Oczywiście możesz wymusić dodanie ignorowanego pliku (git add -f my_folder/my_file.md), ale to nie jest punkt tej odpowiedzi.
Chodzi o wyjaśnienie, dlaczego dodanie !my_folder/my_file.md w .gitignore nie działa z git 2.6 lub mniej.


Należy zauważyć, że z git 2.9.x/2.10 (w połowie 2016?), To może być możliwe, aby ponownie włączyć plik czy katalog nadrzędny tego pliku jest wykluczone if there is no wildcard in the path re-included.

Nguyễn Thái Ngọc Duy (pclouds) próbuje dodać tę funkcję:

Więc, z git 2.8+, to będzie działać:

/my_folder 
!my_folder/my_file.md 
+0

VonC czy mógłbyś rzucić okiem na zaktualizowane pytanie? Próbowałem tego, ale to nie działa. – Gabriel

+1

@ Gabriel próbowałeś go dodać? 'git add my_folder/my_file.md'.Co zwróci 'git check-ignore -v my_folder/my_file.md'? – VonC

+0

VonC: patrz zaktualizowane pytanie, proszę. – Gabriel

14

plik nie pojawi się jako „zmiany mają być poniesione”, jeśli nie jest jeszcze śledzone (IOW nie dodano przed). Po prostu dodaj plik z numerem git add, a Git będzie śledził tylko plik, ale nadal ignoruje folder.

git add -f ignored_folder/my_file 

-f flaga jest ważna, ponieważ git odmówi dodawania plików z pomijanych ścieżek.

1

kiedy muszę śledzić plików, takich jak ta, lub tylko struktury katalogów, dodaję coś podobnego do mojego pliku .gitignore

resources/**/*.* 

co oznacza, „ignorować wszystkie pliki z rozszerzeniem wewnątrz katalogu zasobów w tym podkatalogów” .

Następnie umieszczam "pusty" plik wewnątrz tych katalogów, które chcę śledzić.

Należy pamiętać, że śledzone będą tylko pliki bez rozszerzenia i dlatego to działa.

z opcji umieszczonych poniżej, można dodać to:

!resources/my_needed_file.md 

a to kolejne rozwiązanie, które nie zawiera plików wymuszone, ale jest tylko opcja, jeśli używasz plików z rozszerzeniami.

Mam nadzieję, że to pomoże komuś.