.gitignore все, кроме. c и .h рекурсивно - PullRequest
0 голосов
/ 12 марта 2020

Я хотел бы игнорировать все в определенной папке и ее подпапках, кроме .c и .h файлов.

Но локально мне нужны и другие файлы. Нужно ли мне иметь эти файлы, которые не должны отслеживаться, в git -репортаже до или после добавления .gitignore?

И как мне это сделать?:

#ignore all
*
#but:
!source/**/*.c
!source/**/*.h

Это моё текущее решение, но оно не работает. Но я думаю, что это также относится к моменту времени, когда я должен добавить файлы, которые должны игнорироваться, но должны быть там локально?

РЕДАКТИРОВАТЬ: Проблема в том, что я получил копию проект, который выполняет все виды makefile magi c и другие вещи, я даже не знаю, какие существуют типы файлов и подпапок (я буду работать только в одной папке массивного проекта, поэтому я не думаю, что то, что gitignore должен быть настолько эксклюзивным) ... и я не могу просто все зафиксировать, потому что я думаю, что должна быть установлена ​​библиотека lib, поэтому каждый должен делать это самостоятельно ...

Ответы [ 2 ]

3 голосов
/ 12 марта 2020

Игнорирование * означает игнорирование всего, включая каталоги верхнего уровня. После этого git даже не просматривает подкаталоги. Чтобы исправить это игнорировать каталоги. Все ваши .gitignore должны выглядеть так:

# Ignore all
*

# Unignore directories
!*/

# Unignore source code files
!source/**/*.c
!source/**/*.h

Другой подход - игнорировать все, кроме принудительного добавления необходимых файлов с помощью git add -f.

1 голос
/ 12 марта 2020

Проблема в том, что шаблон

*

также исключает все каталоги. Согласно документации gitignore ,

Невозможно повторно включить файл, если исключен родительский каталог этого файла.

Для этого вам нужно будет убедиться, что каталоги не игнорируются. Формат шаблона gitignore не позволяет различать guish между каталогами и обычными файлами, поэтому вам нужно будет сделать это вручную. Одна из возможностей - поместить файл .gitignore в каждом этом каталоге, который включает в себя все его подкаталоги, но было бы проще просто включить все каталоги. Они могут быть сопоставлены (исключительно) с шаблоном, который заканчивается на '/':

!source/**/

Кроме того, вы правы, когда говорите

Но я думаю, что это также относится к моменту времени, когда мне нужно добавить файлы, которые следует игнорировать

в том смысле, что gitignore не применяется к файлам, которые уже отслеживаются.

...