Mam plik gitignore, który powoduje, że git ignoruje *.dll
pliki, 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ąć?
Mam plik gitignore, który powoduje, że git ignoruje *.dll
pliki, 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ąć?
Odpowiedzi:
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.
*.dll
w nim i gitignore mojego projektu ma, !Libs/*.dll
ale wydaje się, że to nie działa.
!Libs/**/*.dll
.
!**/Libs/*.dll
, w zależności od struktury folderów.
!foo.dll
unieważniło polecenie. Jeśli dodam komentarz do osobnego wiersza, zadziała.
Git ignoruje foldery, jeśli piszesz:
/js
ale nie można dodać wyjątków, jeśli wykonasz:
!/js/jquery
lub !/js/jquery/
lub!/js/jquery/*
Musisz napisać:
/js/*
i tylko wtedy możesz z wyjątkiem takich podfolderów
!/js/jquery
!/js/jquery/xyzlib
Nie zostanie zignorowany ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? Wydaje się to dość zabawnym sposobem ...
Aby wykluczyć wszystko z katalogu, ale z niektórych podkatalogów, wykonaj następujące czynności:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
Źródło: https://gist.github.com/444295
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.
!foo.dll
w .gitignore, lub (za każdym razem!) git add -f foo.dll
Jeśli pracujesz z Visual Studio, a Twój bin
plik .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 .gitignore
plik 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.
Rozwiązanie zależy od relacji między regułą git ignore a regułą wyjątku:
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
Od wersji Git 2.7.0 Git weźmie pod uwagę wyjątki. Z oficjalnych informacji o wersji:
- Pozwól późniejszym „! / Abc / def” zastąpić wcześniejsze „/ abc”, które pojawia się w tym samym pliku .gitignore, aby ułatwić wyrażenie „wszystko w katalogu / abc jest ignorowane, z wyjątkiem ...”.
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt