Как мне сказать Git игнорировать все, кроме подкаталога? - PullRequest
191 голосов
/ 08 августа 2009

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

*
!bin/*

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

Есть предложения?

Ответы [ 9 ]

253 голосов
/ 21 декабря 2011

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

/*
/*/
!/bin/

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

92 голосов
/ 13 июня 2012

Здесь как игнорировать все, кроме одного каталога " 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
54 голосов
/ 20 января 2013

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

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

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
37 голосов
/ 08 августа 2009

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

На ум приходят два решения.

.gitignore:

*
!/bin/
!bin/*

или

.gitignore:

*
!/bin/

bin/.gitignore:

!*

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

18 голосов
/ 18 июля 2016

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

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

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

Для пояснения о ведущем слэше: Когда использовать начальный слеш в gitignore .

11 голосов
/ 23 сентября 2015

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

*
!*/
!/path/to/your/dir/**
11 голосов
/ 06 ноября 2010

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

/*
!/public_html
!/.gitignore

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

7 голосов
/ 07 апреля 2011

У меня .gitignore работает:

*/
/*
!bin/
5 голосов
/ 09 февраля 2016

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

!bin**/**

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

Поддержка документов Пример ошибки git

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

...