git ignoruje wyjątek


326

Mam plik gitignore, który powoduje, że git ignoruje *.dllpliki, i takie właśnie zachowanie chcę. Jeśli jednak chcę wyjątek (tj. Mieć możliwość popełnienia foo.dll), jak mogę to osiągnąć?


8
możliwy duplikat wyjątków w
.gitignore

fwiw, dziadek duplikatów odpowiedzi na ten temat - taki, na który powinieneś się przyjrzeć - prawdopodobnie sprawi, że .gitignore zignoruje wszystko oprócz kilku plików - bardzo regularną aktywność i kilka dobrych odpowiedzi. Jestem szczególnym fanem tej odpowiedzi , która wydaje się jasna i dokładna.
Kay V

Odpowiedzi:


447

Posługiwać się:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

Z gitignore :

Opcjonalny przedrostek! co neguje wzór; każdy pasujący plik wykluczony przez poprzedni wzór zostanie ponownie dołączony. Jeśli negowany wzorzec pasuje, zastąpi to źródła wzorców o niższym priorytecie.


22
Zobacz także odpowiedź na formularzu @Matiss Jurgelis - to ważny dodatek
Dan

7
Czy mogę dodać wyjątek do gitignore mojego projektu, a nie do mojego globalnego gitignore? Na przykład, jeśli chcę dołączyć wszystkie biblioteki DLL do katalogu? Mój gitignore_global ma *.dllw nim i gitignore mojego projektu ma, !Libs/*.dllale wydaje się, że to nie działa.
Joel Kinzel,

1
@jkinz, powinieneś spróbować !Libs/**/*.dll.
Rosberg Linhares

@RosbergLinhares Lub !**/Libs/*.dll, w zależności od struktury folderów.
JAB

2
Dzięki, ale na komputerze Mac dodanie komentarza w tym samym wierszu co !foo.dllunieważniło polecenie. Jeśli dodam komentarz do osobnego wiersza, zadziała.
Giacomo

261

Git ignoruje foldery, jeśli piszesz:

/js

ale nie można dodać wyjątków, jeśli wykonasz: !/js/jquerylub !/js/jquery/lub!/js/jquery/*

Musisz napisać:

/js/* 

i tylko wtedy możesz z wyjątkiem takich podfolderów

!/js/jquery

44
To bardzo ważne. Dziękuję Ci!
VisioN

3
Wygląda jednak na to, że nie można dodać zagnieżdżonych folderów, np. !/js/jquery/xyzlibNie zostanie zignorowany ...
Ignorant

2
Jak mówi @Ignorant, folder, który „z wyjątkiem” z reguły ignorowania, musi znajdować się w tym samym miejscu, co „*”
Red Pea

3
tak /js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Wydaje się to dość zabawnym sposobem ...
Imperishable Night

naprawdę mi pomogłeś.
Loyea

55

Możesz po prostu git add -f path/to/foo.dll.

.gitignore ignoruje tylko pliki do zwykłego śledzenia i podobne rzeczy git add .


4
Aby uzyskać więcej informacji, -fmówi git, aby .gitignore
wymusił

Co jest świetne, jeśli masz tylko jeden plik, mniej przydatne, jeśli potrzebujesz wzorca
Liam


15

Po prostu dodaj !przed regułą wykluczenia.

Według strony podręcznika gitignore :

Wzory mają następujący format:

...

  • Opcjonalny przedrostek! co neguje wzór; każdy pasujący plik wykluczony przez poprzedni wzór zostanie ponownie dołączony. Jeśli negowany wzorzec pasuje, zastąpi to źródła wzorców o niższym priorytecie.


4

Jeśli pracujesz z Visual Studio, a Twój binplik .dll znajduje się w folderze, musisz dodać wyjątek dla samego folderu bin, zanim będziesz mógł dodać wyjątek dla pliku .dll. Na przykład

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

Jest tak, ponieważ domyślny .gitignoreplik programu Visual Studio zawiera wzorzec ignorowania dla[Bbin]/

Ten wzorzec zapycha wszystkie foldery bin (i w konsekwencji ich zawartość), co powoduje, że każda próba dołączenia zawartości jest zbędna (ponieważ sam folder jest już ignorowany).

Udało mi się ustalić, dlaczego mój plik nie był wyłączony z działania

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

z okna Git Bash. To zwróciło [Bbin]/wzór.


2

Rozwiązanie zależy od relacji między regułą git ignore a regułą wyjątku:

  1. Pliki / Pliki na tym samym poziomie: użyj rozwiązania @Skilldrick .
  2. Foldery / podfoldery: użyj rozwiązania @Matiss Jurgelis .
  3. Pliki / Pliki na różnych poziomach lub Pliki / Podfoldery: możesz to zrobić:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

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.