Как мне заархивировать папку, но исключить вложенную папку .git

Я пытаюсь создать zip-файл из папки, и я хотел бы исключить .git вложенная папка из результирующего zip-файла.

Я перешел в родительскую папку той, которую хочу заархивировать (называется bitvolution) и я делаю:

zip -r bitvolution.zip bitvolution -x ".git"

Но это не исключает .git вложенная папка.

Я пробовал разные комбинации, -x .git*, -x \.git/*, -x .git/\*, -x \.git/\*. Я также попытался использовать полный путь для аргумента exclude... но просто не добрался туда.

Правильное выражение - это -x '*.git*', поэтому полная команда должна быть:

zip -r bitvolution.zip ./bitvolution -x '*.git*'

Объяснение от http://selfsolved.com/problems/zip-command-exclude-svn-director:

Правильное заклинание - это

zip -9 -r --exclude=*.svn*  foo.zip [directory-to-compress]

Вы также можете добавить
--exclude=*.DS_Store* чтобы исключить раздражающий каталог Mac OS X, отобразите файлы метаданных.

Обратите внимание, что выражение, переданное в --exclude использует весь исходный относительный путь к каталогу в качестве исходной строки для сопоставления. Так .svn/* сам по себе не работает; подстановочный знак впереди гарантирует, что он соответствует .svn каталоги в любом месте дерева каталогов.

Если вы пытаетесь заархивировать проект, который хранится в Git, используйте git archive команда. Из исходного каталога:

git archive -o bitvolution.zip HEAD

Вы можете использовать любой идентификатор фиксации или тега вместо HEAD чтобы заархивировать проект в определенный момент.

Если вы хотите добавить префикс (например, папку верхнего уровня) к каждому файлу:

git archive -o bitvolution.zip --prefix=bitvolution/ HEAD

Вы также можете настроить уровень сжатия в диапазоне от 0 (без сжатия) до 9 (максимальное сжатие) включительно, например

git archive -o bitvolution.zip -9 HEAD

Другие параметры см. на странице справки (git help archive).

Я добавил обратную косую черту:

zip -r bitvolution.zip bitvolution -x \*.git\*

справочная страница о обратной косой черте:

Обратная косая черта позволяет избежать подстановки имени файла оболочки, так что сопоставление имен выполняется zip на всех уровнях каталога.

Предполагая, что у вас установлен git на компьютере, на котором вы это делаете, вы также можете использовать сам git для создания своего архива.

git archive --format=zip HEAD -o bitvolution.zip

Если вы используете zsh, команда должна выглядеть следующим образом:

zip -r target_name.zip source_dir -x '/*.git/*'

Если вы используете: zip -r target_name.zip source_dir -x /*.git/*.без "регулярного выражения" zsh будет обрабатываться перед запуском zip. Вы получите сообщение об ошибке:

zsh: no matches found: /*.git/*

Используйте следующий формат, если вы хотите игнорировать всю папку целиком.

Например, игнорировать каждый node_modules папке, в каждой конечной точке:

zip -r API.zip API/* -x */node_modules/*

Вот пример того, что я использую:

zip -r workspace.zip workspace -x '*/.git/*' -x '*/.DS_Store/*' -x '*/build/*'

-x ".git*" сработал для меня.