У мене є файл 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