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