Как мне сказать Git игнорировать все, кроме подкаталога?
Я хочу игнорировать все файлы в моем хранилище, кроме тех, которые появляются в bin
подкаталог. Я попытался добавить следующее к моему .gitignore
:
*
!bin/*
Однако это не дает желаемого эффекта: я создал новый файл внутри bin/
, но делаю git status
все еще показывает nothing to commit (working directory clean)
,
Какие-либо предложения?
13 ответов
Это игнорирует корневые файлы и корневые каталоги, а затем игнорирует корневой каталог bin:
/*
/*/
!/bin/
Таким образом, вы получите весь каталог bin, включая подкаталоги и их файлы.
Здесь, как игнорировать все, кроме одного каталога "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
Вы должны исключить все на пути к пунктам назначения, но вы должны включить пункты назначения:
Примечание. Это файл исключения (т. Е. Gitignore), поэтому логика инвертирована. Игнорировать все, кроме каталога tsp, игнорировать все в каталоге tsp, кроме каталога src...
/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
Единственная проблема, с которой вы столкнулись bin
сам каталог не соответствует bin/*
шаблон, так что мерзавец даже не смотреть в bin
каталог.
На ум приходят два решения.
.gitignore
:
*
!/bin/
!bin/*
или же
.gitignore
:
*
!/bin/
bin/.gitignore
:
!*
Я предпочитаю второе решение, так как первое решение не перестает игнорировать файлы в bin
каталог, который находится в подкаталогах, которые не называются bin
, Это может иметь или не иметь значения в вашей ситуации.
Из официального git doc один из примеров гласит:
Пример, чтобы исключить все, кроме определенной директории foo/bar (обратите внимание на /* - без косой черты подстановочный знак также исключит все, что находится внутри foo/bar):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
Для объяснения о ведущем слеше: когда использовать ведущий слеш в gitignore.
Попробуйте следовать в последней версии GIT.
*
!*/
!/path/to/your/dir/**
Я думаю, что лучшим способом было бы привязать каждый шаблон к верхнему каталогу git, начав шаблон с косой черты:
/*
!/public_html
!/.gitignore
Вместо игнорирования всех файлов он будет игнорировать только файлы верхнего уровня, а не те, которые находятся в каталоге, который вы не хотите игнорировать.
Поздно на вечеринку, но ни один из ответов не помог мне "из коробки". Это делает:
*
!bin
!bin/**
- первая строка игнорирует все
- вторая строка включает саму заднюю директорию "bin"
- последняя строка включает обратно все содержимое каталога bin, независимо от того, насколько он вложен (обратите внимание на двойную звездочку),
Попробуйте эту неясную ошибку.
!bin**/**
Надеюсь, поможет:)
Поддержка документации по git
PS: попробуйте сначала, прежде чем комментировать.
Мне пришлось сделать это недавно:
*
!sub-dir/
!sub-dir/*
Я не уверен, почему мне нужны две строки, чтобы исключить одну папку, но это то, что сработало для меня и macos.
Мне кажется, я должен игнорировать не родительскую папку, а файлы и папки в ней, используя
/*
-- **/node_modules
++ **/node_modules/*
тогда
++ !node_modules/@my-package/
Вот мое решение. В моем сценарии у меня была папка со следующими подпапками:
- база данных (основная папка)
- conf (вложенная папка)
- драйверы (вложенная папка)
- jars (вложенная папка)
- sql (вложенная папка)
И из папки базы данных я хотел нажать только папку sql, чтобы мой.gitignore
файл был следующим:
database/*
!database/sql/
Где первая строка просто говорит игнорировать все подпапки в папке базы данных, а вторая строка означает, что вы игнорируете все подпапки в папке базы данных, исключите (не игнорируйте) подпапку sql