Интересные факты
-
Чтобы начать игнорировать файл который был ранее закомичен, нужно его удалить из гита. Пример
Параметр --cached говорит что нужно удалить только из гита, сам файл остается без изменений$ echo debug.log >> .gitignore $ git rm --cached debug.log rm 'debug.log' $ git add .gitignore $ git commit -m "Start ignoring debug.log"
-
Для принудительного добавления файла в коммит, используй флаг -f (--force)
или использовать более наглядный способ$ cat .gitignore *.log $ git add -f debug.log $ git commit -m "Force adding debug.log"
$ echo '!debug.log' >> .gitignore $ cat .gitignore *.log !debug.log $ git add debug.log $ git commit -m "Adding debug.log"
-
Можно создать .gitignore не только в корне репы но и в кадой дире по отдельности, но лучше все же один единый
-
Можно создать персональный .gitignore файл который не попадет в репу но будет работать по тем же правилам.
.git/info/exclude
-
Также можно создать глобальный .gitignore файл во всей системе. Пример
Чтобы его удалить нужно поправить файлик ~/.gitconfig$ echo logs > ~/.gitignore $ git config --global core.excludesFile ~/.gitignore $ ls -l итого 4 drwxrwxr-x 4 avis avis 4096 апр 27 18:10 logs $ git st На ветке master Ваша ветка обновлена в соответствии с «origin/master». нечего коммитить, нет изменений в рабочем каталоге
-
Пример дебаггинга игнор файлика
$ git check-ignore file.log file.log $ git check-ignore file.log -v .gitignore:1:*.log file.log
output [file containing the pattern]:[line number of the pattern]:[pattern] [file name]
Знаки
Знак | Коммент |
* | ноль и более символов |
** | ноль и более каталогов |
? | ровно один символ |
[0-9] | один символ от 0 до 9 |
[05] | один символ или 0 или 5 |
! | Отрицание |
Патерны
Патерн | Пример | Комментарий | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
**/logs | ./logs/test.txt ./logs/dir/log.txt ./dir2/logs/dir/log.txt |
Везде где будет найдена дира logs, содержимое будет проигнорированно | |||||||||||||||
**/logs/log.txt | ./logs/log.txt |
Тоже самое что и пред. только для конкретного файла | |||||||||||||||
*log.txt | ./log.txt |
Везде где будет найден файл log.txt | |||||||||||||||
*.txt | ./log.txt |
Тоже самое действует и на расширение файла | |||||||||||||||
.txt !importan_file.txt |
./log.txt ./test/logs/log.txt ./logs/dir1/log.txt ./logs/dir1/importan_file.txt - не попадет в игнор |
Тоже самое действует и на расширение файла | |||||||||||||||
*.txt |
./log.txt ./test/logs/log.txt ./logs/dir1/log.txt ./imp/file.txt ./imp/test.txt - тоже будет проигнорирован т.к. порядок важен! |
||||||||||||||||
Файлы | |||||||||||||||||
/test.txt | ./test.txt ./logs/test.txt - не будет проигнорирован! |
Игнорирует только файл в текущей дире | |||||||||||||||
test.txt | ./test.txt ./logs/test.txt |
Если просто написать название файла, то будет поиск везде где он есть | |||||||||||||||
test?.txt | ./test2.txt ./test3.txt ./test.txt - не будет проигнорирован! ./test10.txt - не будет проигнорирован! |
||||||||||||||||
test[0-5].txt | ./test2.txt ./test3.txt ./test6.txt - не будет проигнорирован! ./test7.txt - не будет проигнорирован! ./test10.txt - не будет проигнорирован! |
||||||||||||||||
test[05].txt | ./test0.txt ./test5.txt ./test6.txt - не будет проигнорирован! ./test7.txt - не будет проигнорирован! ./test10.txt - не будет проигнорирован! |
||||||||||||||||
test[!05].txt | ./test0.txt ./test5.txt ./test6.txt - не будет проигнорирован! ./test7.txt - не будет проигнорирован! ./test10.txt - не будет проигнорирован! |
||||||||||||||||
Диры | |||||||||||||||||
logs | ./logs/test.txt
./logs/dir/test.txt
./dir/logs/dir/test.txt - не будет проигнорирован! |
Везде где будет найдена дира (или файл), все содерживое диры будет в игноре | |||||||||||||||
logs/ | ./logs/test.txt
./logs/dir/test.txt
./dir/logs/dir/test.txt - не будет проигнорирован! |
Если будет слеш - то все содержимое диры | |||||||||||||||
Разница между logs и logs/ | |||||||||||||||||
При logs, игнорируются как диры так и файлы | |||||||||||||||||
|