Как добавить файлы без точек (все файлы без расширений) в файл gitignore?
Как видно из заголовка, возможно ли добавить "файлы без точек" в файл gitignore?
Я предполагаю, что это позаботится обо всех этих надоедливых файлах без расширений.
2 ответа
Вы можете попробовать комбинацию, похожую на:
*
!/**/
!*.*
Тот gitignore
Правило исключения ( шаблон с отрицанием) должно игнорировать все файлы, кроме файлов с расширением.
Как упомянуто ниже Mad Physicist, правило:
Невозможно повторно включить файл, если родительский каталог этого файла исключен. (*
)
(*
: если в git 2.?+ не выполнены определенные условия, см. ниже)
Поэтому !/**/
важно (рекурсивное внесение в белый список родительских папок), если мы хотим поместить файлы в белый список.
Я упомянул это же правило в подобных случаях:
- Gitignore все, кроме одной папки и всего ее содержимого - независимо от уровня вложенности
- Git кроме подкаталога и его файлов игнорируемого каталога
- Gitignore исключает определенные файлы во всех подкаталогах
Как комментирует Jakub Narębski, вы можете не захотеть игнорировать все файлы без расширений.
Мой совет:
- сначала добавьте файл без расширений, который имеет значение
- затем отредактируйте свой
.gitignore
как показано выше: уже версированные файлы не будут игнорироваться (даже если они не имеют расширения). Все остальные будут игнорироваться.
Для любых будущих файлов без расширений, которые вы бы хотели версии:
git add -f -- myFile
Обратите внимание, что в git 2.9.x/2.10 (середина 2016 года?) Может оказаться возможным повторно включить файл, если родительский каталог этого файла будет исключен, если в пути не будет подстановочного знака.
Nguy Thn Thái Ngọc Duy ( pclouds
) пытается добавить эту функцию:
- commit 506d8f1 для git v2.7.0, возвращен в commit 76b620d git v2.8.0-rc0
- commit 5e57f9c git v2.8.0-rc0,... отменён (!) в коммите 5cee3493 git 2.8.0-rc4.
Однако, так как одно из правил для повторного включения было:
Часть каталога в правилах повторного включения должна быть буквальной (то есть без подстановочных знаков)
Это не сработало бы здесь в любом случае.
*
!*/
!*.*
*
говорит Git игнорировать все.
!*/
затем игнорирует все, что является каталогом. Это очень важно.
!*.*
игнорирует все файлы с расширением.
Без !*/
правило, каталоги без .
в имени не будет указан, и ни один из ваших файлов не будет добавлен за пределами корневой папки.
Для справки, прочитайте эти два раздела в выделенной документации.gitignore:
Необязательный префикс "!" который отрицает образец; любой соответствующий файл, исключенный предыдущим шаблоном, снова будет включен. Невозможно повторно включить файл, если родительский каталог этого файла исключен. Git не выводит список исключенных каталогов по соображениям производительности, поэтому любые шаблоны для содержащихся файлов не влияют, независимо от того, где они определены. Поставьте обратную косую черту ("\") перед первым "!" для шаблонов, которые начинаются с литерала "!", например, "! Important!.txt".
Если шаблон заканчивается косой чертой, он удаляется с целью следующего описания, но он будет только находить совпадение с каталогом. Другими словами, foo/ будет соответствовать каталогу foo и путям под ним, но не будет совпадать с обычным файлом или символической ссылкой foo (это согласуется с тем, как вообще работает pathspec в Git).
В моих папках много файлов с *.c, *.h, *.txt, *.csv
и т.д. расширения и двоичные файлы без каких-либо расширений. Поэтому мне нужно было игнорировать все файлы, кроме *.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