Как сказано в заголовке, можно ли добавить в файл gitignore «файлы без точек»?
Думаю, это позаботится обо всех надоедливых файлах без расширений.
Как сказано в заголовке, можно ли добавить в файл gitignore «файлы без точек»?
Думаю, это позаботится обо всех надоедливых файлах без расширений.
Ответы:
Вы можете попробовать комбинацию, похожую на:
*
!/**/
!*.*
Это gitignoreправило исключения ( отрицательный образец ) должно игнорировать все файлы, кроме файлов с расширением.
Как упомянуто ниже по Mad Физик , правило:
Невозможно повторно включить файл, если родительский каталог этого файла исключен. (*)
(*: если в git 2.?+ не выполняются определенные условия, см. ниже)
Вот почему !/**/это важно (рекурсивное занесение родительских папок в белый список), если мы хотим занести файлы в белый список.
Я упоминал это же правило в подобных случаях, например:
Как Якуб Narębski комментарии , вы не можете игнорировать все файлы extensionless.
Мой совет:
.gitignoreкак показано выше: уже версированные файлы не будут проигнорированы (даже если у них нет расширения). Все остальные будут проигнорированы.Для любых будущих файлов без расширений, которые вы хотите версировать:
git add -f -- myFile
Обратите внимание, что с git 2.9.x / 2.10 (середина 2016 года?) Можно было бы повторно включить файл, если родительский каталог этого файла исключен, если в повторно включенном пути нет подстановочного знака .
Nguyễn Thái Ngọc Duy ( pclouds) пытается добавить эту функцию:
Однако, поскольку одним из правил повторного включения было:
Часть каталога в правилах повторного включения должна быть буквальной (т. Е. Без подстановочных знаков).
Все равно здесь это не сработало бы.
.gitignoreбыло бы **и !**.*. Я знаю, что это не имеет значения, если звездочка помещена впереди, но это более четко и
!Makefile. Помните, что у меня возникли проблемы с этим решением в Git 1.7.1, в то время как оно нормально работало в 1.9.0. В моем случае добавление файла в корневой каталог работало нормально, но добавление файла с расширением внутри подкаталога было проигнорировано. Похоже, это связано с тем, что 1.7.1 еще не поддерживал **шаблон, см. Здесь !
**был добавлен в Git 1.8.2. Есть ли недостаток в использовании !*/вместо !/**/?
*
!*/
!*.*
* говорит git игнорировать все.
!*/затем отменяет игнорирование всего, что является каталогом. Это очень важно.
!*.* отменяет игнорирование всех файлов с расширением.
Без !*/правила каталоги без символа .в имени не будут перечислены, и ни один из желаемых файлов не будет добавлен за пределы корневой папки.
Для справки прочтите эти два раздела выделенной документации .gitignore :
Необязательный префикс "!" который сводит на нет узор; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. Невозможно повторно включить файл, если родительский каталог этого файла исключен. Git не перечисляет исключенные каталоги по соображениям производительности, поэтому любые шаблоны для содержащихся файлов не имеют никакого эффекта, независимо от того, где они определены. Поставьте обратную косую черту ("\") перед первым "!" для шаблонов, начинающихся с буквального символа «!», например «! important! .txt».
Если шаблон заканчивается косой чертой, он удаляется для целей следующего описания, но он обнаружит совпадение только с каталогом. Другими словами, foo / будет соответствовать каталогу foo и путям под ним, но не будет соответствовать обычному файлу или символической ссылке foo (это согласуется с тем, как pathspec в целом работает в Git).
В моих папках много файлов с *.c, *.h, *.txt, *.csvрасширениями и т. Д. И бинарных файлов без расширений. Поэтому мне нужно было игнорировать все файлы execpt *.c,*.hи .gitignore, так что это работает для меня из .gitignoreпримера:
*/* #ignore all files in each directory
!*/*.c #unignore .c files in each directory
!*/*.h #unignore .h header files in each directory
!.gitignore #unignore .gitignore
README,LICENSEилиCOPYING,INSTALL, иMakefileт.д., но вы всегда можете принудительно добавить их , а затем они отслеживаются