Есть некоторые extensionless файлы , которые вы не хотите игнорировать: README, LICENSEили COPYING, INSTALL, и Makefileт.д., но вы всегда можете принудительно добавить их , а затем они отслеживаются
Якуб Narębski
@ JakubNarębski хорошее замечание. Я включил его в свой ответ для большей наглядности.
сначала добавьте файл без расширения, который имеет значение
затем отредактируйте ваш, .gitignoreкак показано выше: уже версированные файлы не будут проигнорированы (даже если у них нет расширения). Все остальные будут проигнорированы.
Для любых будущих файлов без расширений, которые вы хотите версировать:
Ответ совершенно правильный. Но, пожалуй, лучше .gitignoreбыло бы **и !**.*. Я знаю, что это не имеет значения, если звездочка помещена впереди, но это более четко и
понятно
7
Примечание: для работы с другими правилами исключения это должен быть первый набор правил в вашем файле .gitignore
Эрик,
Вы также можете повторно включить определенные файлы без расширений, например, с помощью !Makefile. Помните, что у меня возникли проблемы с этим решением в Git 1.7.1, в то время как оно нормально работало в 1.9.0. В моем случае добавление файла в корневой каталог работало нормально, но добавление файла с расширением внутри подкаталога было проигнорировано. Похоже, это связано с тем, что 1.7.1 еще не поддерживал **шаблон, см. Здесь !
mxmlnkn 07
1
**был добавлен в Git 1.8.2. Есть ли недостаток в использовании !*/вместо !/**/?
mxmlnkn 07
@TamaMcGlinn Это похоже на регулярное выражение: gitignore не поддерживает регулярные выражения.
VonC
51
*
!*/
!*.*
* говорит git игнорировать все.
!*/затем отменяет игнорирование всего, что является каталогом. Это очень важно.
!*.* отменяет игнорирование всех файлов с расширением.
Без !*/правила каталоги без символа .в имени не будут перечислены, и ни один из желаемых файлов не будет добавлен за пределы корневой папки.
Необязательный префикс "!" который сводит на нет узор; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. Невозможно повторно включить файл, если родительский каталог этого файла исключен. Git не перечисляет исключенные каталоги по соображениям производительности, поэтому любые шаблоны для содержащихся файлов не имеют никакого эффекта, независимо от того, где они определены. Поставьте обратную косую черту ("\") перед первым "!" для шаблонов, начинающихся с буквального символа «!», например «! important! .txt».
Если шаблон заканчивается косой чертой, он удаляется для целей следующего описания, но он обнаружит совпадение только с каталогом. Другими словами, foo / будет соответствовать каталогу foo и путям под ним, но не будет соответствовать обычному файлу или символической ссылке foo (это согласуется с тем, как pathspec в целом работает в Git).
Хороший улов. +1. Я забыл обновить свой ответ тем правилом, которое недавно использовал в других ответах шахт. Я соответствующим образом обновил свой ответ.
VonC
0
В моих папках много файлов с *.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
т.д., но вы всегда можете принудительно добавить их , а затем они отслеживаютсяОтветы:
Вы можете попробовать комбинацию, похожую на:
Это
gitignore
правило исключения ( отрицательный образец ) должно игнорировать все файлы, кроме файлов с расширением.Как упомянуто ниже по Mad Физик , правило:
Невозможно повторно включить файл, если родительский каталог этого файла исключен. (
*
)(
*
: если в git 2.?+ не выполняются определенные условия, см. ниже)Вот почему
!/**/
это важно (рекурсивное занесение родительских папок в белый список), если мы хотим занести файлы в белый список.Я упоминал это же правило в подобных случаях, например:
Как Якуб Narębski комментарии , вы не можете игнорировать все файлы extensionless.
Мой совет:
.gitignore
как показано выше: уже версированные файлы не будут проигнорированы (даже если у них нет расширения). Все остальные будут проигнорированы.Для любых будущих файлов без расширений, которые вы хотите версировать:
Обратите внимание, что с 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 еще не поддерживал**
шаблон, см. Здесь !**
был добавлен в Git1.8.2
. Есть ли недостаток в использовании!*/
вместо!/**/
?*
говорит git игнорировать все.!*/
затем отменяет игнорирование всего, что является каталогом. Это очень важно.!*.*
отменяет игнорирование всех файлов с расширением.Без
!*/
правила каталоги без символа.
в имени не будут перечислены, и ни один из желаемых файлов не будет добавлен за пределы корневой папки.Для справки прочтите эти два раздела выделенной документации .gitignore :
источник
В моих папках много файлов с
*.c, *.h, *.txt, *.csv
расширениями и т. Д. И бинарных файлов без расширений. Поэтому мне нужно было игнорировать все файлы execpt*.c,*.h
и.gitignore
, так что это работает для меня из.gitignore
примера:источник