Мерзавец игнорировать исключение
У меня есть файл gitignore, который заставляет git игнорировать *.dll
файлы, и это на самом деле поведение, которое я хочу. Тем не менее, если я хочу исключение (то есть, чтобы иметь возможность совершить foo.dll
) как мне этого добиться?
12 ответов
Использование:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
Из гитиньоре:
Необязательный префикс! который отрицает образец; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. Если шаблон с отрицанием соответствует, это переопределит источники шаблонов с более низким приоритетом.
Git игнорирует папки, если вы пишете:
/js
но он не может добавлять исключения, если вы делаете:!/js/jquery
или же !/js/jquery/
или же !/js/jquery/*
Вы должны написать:
/js/*
и только тогда вы можете, кроме подпапок, как это
!/js/jquery
Вы можете просто git add -f path/to/foo.dll
,
.gitignore
игнорирует только файлы для обычного отслеживания и тому подобное git add .
Чтобы исключить все в каталоге, кроме некоторых подкаталогов, выполните следующие действия:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
Источник: https://gist.github.com/444295
Просто добавь !
перед правилом исключения.
Согласно странице руководства gitignore:
Шаблоны имеют следующий формат:
...
- Необязательный префикс! который отрицает образец; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. Если шаблон с отрицанием соответствует, это переопределит источники шаблонов с более низким приоритетом.
Для вложенных папок я придумал решение, основанное на ответе Матисса .
Допустим, я хочу игнорировать все в
build/
каталог (который находится в
/app
). Итак, я делаю:
build/*
Однако, если я хочу исключить
build/outputs/bundle/release
подпапка, мне нужно поиграть в прятки!
/app/build/*
!/app/build/outputs
/app/build/outputs/*
!/app/build/outputs/bundle
/app/build/outputs/bundle/*
!/app/build/outputs/bundle/release
Важные заметки:
- Все пути должны начинаться с
/
и быть относительно.gitignore
- Вы должны сделать это по одной подпапке за раз. Вы можете увидеть в VS Code (например), что он включает, а что нет на каждом шагу.
Если вы работаете с Visual Studio и ваш.dll находится в bin
папку, затем вам нужно добавить исключение для самой папки bin, прежде чем вы сможете добавить исключение для файла.dll. Например
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
Это потому что Visual Studio по умолчанию .gitignore
файл содержит шаблон игнорирования для [Bbin]/
Этот шаблон выгружает все папки bin (и, следовательно, их содержимое), что делает любую попытку включить содержимое избыточным (поскольку сама папка уже игнорируется).
Я смог выяснить, почему мой файл не был исключен при запуске
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
из окна Git Bash. Это вернуло [Bbin]/
шаблон.
Решение зависит от отношения между правилом игнорирования git и правилом исключения:
- Файлы / Файлы на одном уровне: используйте решение @Skilldrick.
- Папки / подпапки: используйте решение @Matiss Jurgelis.
Файлы / Файлы на разных уровнях или Файлы / Подпапки: вы можете сделать это:
*.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
Вот как я это делаю с файлом README.md в каждом каталоге:
/data/*
!/data/README.md
!/data/input/
/data/input/*
!/data/input/README.md
!/data/output/
/data/output/*
!/data/output/README.md
Если у вас есть каталог и вы хотите игнорировать все, за исключением некоторых файлов (например,
*.py
files) вы можете:
sub-dir/**/*.*
!sub-dir/**/*.py
Начиная с Git 2.7.0, Git будет учитывать исключения. Из официальных заметок о выпуске:
- Позвольте более позднему "! / Abc / def" переопределить более ранний "/ abc", который появляется в том же файле.gitignore, чтобы упростить выражение "все в каталоге / abc игнорируется, кроме...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt