У мене є файл gitignore, який змушує ігнорувати *.dllфайли git , і це власне поведінка, яку я хочу. Однак, якщо я хочу виняток (тобто, щоб мати змогу здійснити foo.dll), як я можу досягти цього?
У мене є файл gitignore, який змушує ігнорувати *.dllфайли git , і це власне поведінка, яку я хочу. Однак, якщо я хочу виняток (тобто, щоб мати змогу здійснити foo.dll), як я можу досягти цього?
Відповіді:
Використання:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
З gitignore :
Необов’язковий префікс! що заперечує візерунок; будь-який відповідний файл, виключений за попереднім шаблоном, знову буде включений. Якщо заперечений візерунок збігається, це замінить джерела шаблонів нижчих пріоритетів.
*.dllв ньому, а в моєму проекті є gitignore, !Libs/*.dllале це, здається, не працює.
!Libs/**/*.dll.
!**/Libs/*.dllзалежно від структури папки.
!foo.dllі команда did, визнала недійсною команду. Якщо я додаю коментар в окремий рядок, він працює.
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папці, вам потрібно додати виняток для самої папки бін, перш ніж ви зможете додати виняток для файлу .dll. Напр
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
Це тому, що .gitignoreфайл Visual Studio за замовчуванням містить шаблон ігнорування для[Bbin]/
Цей шаблон закриває всі папки бін (і, отже, їх вміст), що робить будь-яку спробу включити вміст зайвим (оскільки сама папка вже ігнорується).
Я зміг знайти, чому мій файл не був виключений запуском
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
з вікна Git Bash. Це повернуло [Bbin]/шаблон.
Рішення залежить від співвідношення між правилом ігнорування git та правилом виключення:
Файли / файли на різних рівнях або Файли / вкладені папки: ви можете зробити це:
*.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