Istnieją pewne pliki bez rozszerzeń, które nie chcą ignorować: README, LICENSElub COPYING, INSTALL, Makefileitd., Chociaż zawsze można wymusić dodać je, a następnie są śledzone
Jakub Narębski
@ JakubNarębski dobra uwaga. Zawarłem to w mojej odpowiedzi dla większej widoczności.
dodaj najpierw plik bez rozszerzenia, który ma znaczenie
następnie edytuj swój, .gitignorejak pokazano powyżej: już wersjonowane pliki nie zostaną zignorowane (nawet jeśli nie mają rozszerzenia). Wszystkie inne zostaną zignorowane.
W przypadku przyszłych plików bez rozszerzeń, które chcesz zaktualizować:
Odpowiedź jest całkowicie poprawna. Ale może lepiej .gitignorebyłoby **i !**.*. Wiem, że to nie ma znaczenia, jeśli gwiazdka jest umieszczona z przodu, ale jest bardziej wyraźna i brzmi lepiej, jak muszle radzą sobie z symbolami wieloznacznymi ...
Willem Van Onsem
7
Uwaga: aby pracować z innymi regułami wykluczania, musi to być pierwszy zestaw reguł w pliku .gitignore
Erik
Możesz także ponownie uwzględnić niektóre pliki bez rozszerzeń, np !Makefile. Z rozszerzeniem . Pamiętaj, że miałem problemy z tym rozwiązaniem w Git 1.7.1, podczas gdy działało dobrze w 1.9.0. W moim przypadku dodanie pliku w katalogu głównym działało dobrze, ale dodanie pliku z rozszerzeniem w podkatalogu było wyświetlane jako ignorowane. Wydaje się, że dzieje się tak, ponieważ wersja 1.7.1 jeszcze nie obsługiwała tego **wzorca, zobacz tutaj !
mxmlnkn
1
**został dodany w Git 1.8.2. Czy jest jakaś wada w stosunku do używania !*/zamiast !/**/?
mxmlnkn
@TamaMcGlinn To wygląda jak wyrażenie regularne: gitignore nie obsługuje wyrażeń regularnych.
VonC
50
*
!*/
!*.*
* mówi gitowi, aby wszystko ignorował.
!*/następnie anuluje ignorowanie wszystkiego, co jest katalogiem. To jest kluczowe.
!*.* anuluje ignorowanie wszystkich plików z rozszerzeniem.
Bez !*/reguły katalogi bez znaku .w nazwie nie byłyby wymienione i żaden z żądanych plików nie zostałby dodany poza katalog główny.
Opcjonalny przedrostek „!” co neguje wzorzec; każdy pasujący plik wykluczony przez poprzedni wzorzec zostanie ponownie uwzględniony. Nie można ponownie dołączyć pliku, jeśli katalog nadrzędny tego pliku jest wykluczony. Git nie wyświetla wykluczonych katalogów ze względu na wydajność, więc wszelkie wzorce na zawartych plikach nie mają wpływu, bez względu na to, gdzie są zdefiniowane. Umieść ukośnik odwrotny („\”) przed pierwszym znakiem „!” dla wzorców zaczynających się od dosłownego „!”, na przykład „! ważne! .txt”.
Jeśli wzorzec kończy się ukośnikiem, jest usuwany do celów poniższego opisu, ale znalazłby tylko dopasowanie do katalogu. Innymi słowy, foo / dopasuje katalog foo i ścieżki pod nim, ale nie będzie pasował do zwykłego pliku lub dowiązania symbolicznego foo (jest to zgodne z ogólnym sposobem działania pathspec w Git).
Dobry chwyt. +1. Zapomniałem zaktualizować swoją odpowiedź o zasadę, której ostatnio użyłem w innych odpowiedziach w kopalniach. Odpowiednio zaktualizowałem moją odpowiedź.
VonC,
0
W moich folderach jest dużo plików z *.c, *.h, *.txt, *.csvrozszerzeniami itp. Oraz plików binarnych bez żadnego rozszerzenia. Musiałem więc zignorować wszystkie pliki execpt *.c,*.hi .gitignore, Więc to działa dla mnie, z .gitignoreprzykładu:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README
,LICENSE
lubCOPYING
,INSTALL
,Makefile
itd., Chociaż zawsze można wymusić dodać je, a następnie są śledzoneOdpowiedzi:
Możesz wypróbować kombinację podobną do:
Ta
gitignore
reguła wykluczenia ( zanegowany wzorzec ) powinna ignorować wszystkie pliki, z wyjątkiem tych z rozszerzeniem.Jak wspomniano poniżej przez Mad fizyka , zasada jest:
Nie można ponownie dołączyć pliku, jeśli katalog nadrzędny tego pliku jest wykluczony. (
*
)(
*
: chyba że są spełnione określone warunki w git 2.?+, patrz poniżej)Dlatego jest
!/**/
to ważne (rekurencyjne wyświetlanie białych list folderów nadrzędnych), jeśli chcemy wyświetlać pliki na białej liście.Wspomniałem o tej samej zasadzie w podobnych przypadkach:
Jak komentuje Jakub Narębski , możesz nie chcieć ignorować wszystkich plików bez rozszerzeń.
Moja rada:
.gitignore
jak pokazano powyżej: już wersjonowane pliki nie zostaną zignorowane (nawet jeśli nie mają rozszerzenia). Wszystkie inne zostaną zignorowane.W przypadku przyszłych plików bez rozszerzeń, które chcesz zaktualizować:
Zauważ, że w przypadku git 2.9.x / 2.10 (połowa 2016?) Może być możliwe ponowne dołączenie pliku, jeśli katalog nadrzędny tego pliku jest wykluczony, jeśli nie ma symbolu wieloznacznego w ścieżce ponownie dołączonej .
Nguyễn Thái Ngọc Duy (
pclouds
) próbuje dodać tę funkcję:Jednak ponieważ jedną z zasad ponownego włączenia była:
To i tak by tu nie zadziałało.
źródło
.gitignore
byłoby**
i!**.*
. Wiem, że to nie ma znaczenia, jeśli gwiazdka jest umieszczona z przodu, ale jest bardziej wyraźna i brzmi lepiej, jak muszle radzą sobie z symbolami wieloznacznymi ...!Makefile
. Z rozszerzeniem . Pamiętaj, że miałem problemy z tym rozwiązaniem w Git 1.7.1, podczas gdy działało dobrze w 1.9.0. W moim przypadku dodanie pliku w katalogu głównym działało dobrze, ale dodanie pliku z rozszerzeniem w podkatalogu było wyświetlane jako ignorowane. Wydaje się, że dzieje się tak, ponieważ wersja 1.7.1 jeszcze nie obsługiwała tego**
wzorca, zobacz tutaj !**
został dodany w Git1.8.2
. Czy jest jakaś wada w stosunku do używania!*/
zamiast!/**/
?*
mówi gitowi, aby wszystko ignorował.!*/
następnie anuluje ignorowanie wszystkiego, co jest katalogiem. To jest kluczowe.!*.*
anuluje ignorowanie wszystkich plików z rozszerzeniem.Bez
!*/
reguły katalogi bez znaku.
w nazwie nie byłyby wymienione i żaden z żądanych plików nie zostałby dodany poza katalog główny.Dla odniesienia przeczytaj te dwie sekcje w wyróżniającej się dokumentacji .gitignore :
źródło
W moich folderach jest dużo plików z
*.c, *.h, *.txt, *.csv
rozszerzeniami itp. Oraz plików binarnych bez żadnego rozszerzenia. Musiałem więc zignorować wszystkie pliki execpt*.c,*.h
i.gitignore
, Więc to działa dla mnie, z.gitignore
przykładu:źródło