Как сообщить Git игнорировать все, кроме подкаталога?

Я хочу игнорировать все файлы в моем репозитории, кроме тех, которые встречаются в подкаталоге bin. Я попытался добавить следующее к своему .gitignore:

*
!bin/*

Однако это не имеет желаемого эффекта: я создал новый файл внутри bin/, но при выполнении git status показывается nothing to commit (working directory clean).

Любые предложения?

Ответ 1

Это игнорирует корневые файлы и корневые каталоги, а затем игнорирует каталог корневого bin:

/*
/*/
!/bin/

Таким образом вы получаете весь каталог bin, включая подкаталоги и их файлы.

Ответ 2

Здесь как игнорировать все, кроме одного каталога " MY_SUPER_DUPER_TEMPLATE_directory" в некотором каталоге

Структура:/bitrix/templates/ MY_SUPER_DUPER_TEMPLATE_directory

/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore

Ответ 3

Вы должны исключить все на пути к пунктам назначения, но вы должны включить пункты назначения:

Примечание. Это файл исключения (т.е..gitignore), поэтому логика инвертирована. Игнорировать все, кроме каталога tsp, игнорировать все в каталоге tsp, кроме каталога src...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore

Ответ 4

Единственная проблема, с которой вы столкнулись, заключается в том, что сам каталог bin не соответствует шаблону bin/*, поэтому git даже не смотрит в каталог bin.

Есть два решения, которые spring не имеют.

.gitignore:

*
!/bin/
!bin/*

или

.gitignore:

*
!/bin/

bin/.gitignore:

!*

Я предпочитаю второе решение, так как первое решение не перестает игнорировать файлы в каталоге bin, которые находятся в подкаталогах, которые не называются bin. Это может быть или не иметь значения в вашей ситуации.

Ответ 5

Из официального git doc, один из примеров гласит:

Пример для исключения всего, кроме определенной директории foo/bar (обратите внимание на /* - без косой черты подстановочный знак также исключит все, что находится внутри foo/bar):

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

Для пояснения о ведущей косой черте: Когда использовать начальную косую черту в gitignore.

Ответ 6

Попробуйте выполнить последнюю версию GIT.

*
!*/
!/path/to/your/dir/**

Ответ 7

Я думаю, лучший способ - привязать каждый шаблон к началу git, запустив шаблон с косой чертой:

/*
!/public_html
!/.gitignore

Вместо игнорирования всех файлов он будет игнорировать только файлы верхнего уровня, а не те, которые вы не хотите игнорировать.

Ответ 8

Этот .gitignore работает для меня:

*/
/*
!bin/

Ответ 9

попробуйте эту неясную ошибку.

!bin**/**

Надеюсь, это поможет :)

Поддержка документов git bug sample

PS: попробуйте сначала, прежде чем комментировать.

Ответ 10

Я должен был сделать это недавно:

*
!sub-dir/
!sub-dir/*

Я не уверен, почему мне нужно две строки для исключения одной папки, но это то, что сработало для меня и для macos.