Вопрос Как закрепить папку, но исключить подпапку .git


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

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

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

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

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


149
2018-02-28 20:38


происхождения




ответы:


Правильное выражение -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 каталогов в любом месте дерева каталогов.


182
2018-02-28 21:01



Мне пришлось обернуть глобус в кавычки или избежать звездочек с обратной косой чертой, например zip --exclude '*.git*' -r directory.zip directory или zip --exclude \*.git\* -r directory.zip directory - Dmitry Minkovsky
Если вы беспокоитесь о потере других файлов, называемых something.gitwhatever, вы также можете использовать --exclude /.git*, - Erin Call
в ZSH мне пришлось добавить обратную косую черту: -x \*.git\* - DmitrySandalov
Моя предпочтительная альтернатива обратным слэшам и цитатам в zsh: noglob zip -r out.zip someFolder -x *someExcludedFolder* - Sébastien
Как использовать его с tar? Он не работает с командой tar. - RN Kushwaha


Если вы пытаетесь заархивировать проект, который хранится в 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).


84
2017-12-14 11:08



Это не только не будет включать в себя папку git, но и все, что находится в файле gitignore, также будет исключено. Вы, сэр, получаете верх. - JoeMoe1984
Просто то, что я хотел сделать! - Bjarte
Я опаздываю на вечеринку, но это меня полностью сдуло. Отличный ответ! - Tom
Интересно, почему это не лучший ответ? - nabtron
для меня это был самый большой TIL сегодня ... - Shawn Cicoria - MSFT


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

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

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

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


21
2017-12-14 10:13



добавление звездочек с косой чертой для меня на Ubuntu 14.04 для исключения каталогов - Dimitry K


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

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

5
2017-12-14 11:12





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

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

Если вы используете: zip -r target_name.zip source_dir -x /*.git/*, без 'regex', zsh будет обрабатываться до запуска zip. Появится сообщение об ошибке:

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

1
2018-06-08 09:35



Благодаря! Это то, что сработало для меня с помощью Bash на Ubuntu в Windows. - Adriano Monecchi