Смолить папку без .git файлов?

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

  • Основная машина — дистрибутив, который я знаю хорошо и я доволен
  • Запасная машина — дистрибутив, который я не знаю, и я хочу изучить это
  • Особые случаи: HTPC, поле MAME, прокси — дистрибутив угодили этим потребностям

Большая вещь о *отклоняет, то, что можно настроить любого из них для любой определенной потребности, которую Вы хотите. Дистрибутивы просто позволяют Вам достигать тех ниш без всей ручной конфигурации.

DistroWatch был бы хорошим местом к исследованию. Можно найти последние дистрибутивы, если Вы хотите пойти ультрасовременным путем или самым популярным, если Вы хотите пойти тем путем. Столбец The Weekly мог также дать Вам некоторое понимание.

У меня нет слишком большого опыта BSD, таким образом, я пошел бы тем путем. Но это - просто я.

16
13.08.2011, 02:19
4 ответа

Взгляните сначала на git help archive. archive команда мерзавца, которая позволяет делать архивы, содержащие только прослеженные файлы мерзавца. Вероятно, что Вы ищете. Один пример перечислил в конце страницы справочника:

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
23
27.01.2020, 19:47
  • 1
    этот единственные архивы базируется мерзавец repo. Если подмодули использовались - их каталоги будут пусты. –  Stann 05.05.2012, 08:00
  • 2
    @Stann: Спасибо, от другого пользователя –  Mark K Cowan 09.12.2015, 20:09

Если Вы хотите, чтобы архив включал файлы, прослеженные мерзавцем, но не самим репозиторием мерзавца или каким-либо сгенерированным или в других отношениях неотслеженным файлом, то используйте git archive.

Если Вы конкретно хотите исключить .git но включайте все остальное, в соответствии с Linux или FreeBSD или OSX или Cygwin, tar имеет простую опцию исключить каталог:

tar -c --exclude .git -f - foo | gzip >foo.tgz

С tar GNU (т.е. в соответствии с Linux или Cygwin), можно сократить это к tar czf foo.tgz --exclude .git foo.

POSIX способ создать архивы pax.

pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
20
27.01.2020, 19:47
  • 1
    Делает git компиляции в любой системе, где tar не доступно? :-) –  Stéphane Gimenez 13.08.2011, 02:35
  • 2
    @StéphaneGimenez, Вероятно, нет. Но это действительно компилирует в системах где tar имеет нет --exclude опция, такая как OpenBSD (который по общему признанию копирует мир s опция, но это не общее расширение синтаксиса команды tar). –  Gilles 'SO- stop being evil' 13.08.2011, 02:38

Простейший ответ: Добавьте - exclude-vcs

- exclude-vcs

Это исключает все каталоги системы контроля версий

Лично я использую

tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs

, поэтому все, что вам нужно сделать, это добавить --exclude-vcs в конце команды.

22
27.01.2020, 19:47

Благодаря ответ, который я получил на один из моих вопросов , я нашел другое решение . Итак, для полноты картины, вот решение, использующее find :

find . -path './.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

И если вы хотите исключить возможные папки .git внутри (sub) + folder :

find . -path '*/.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

Последнее также может быть достигнуто с помощью:

find . -type d -name '.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

Очень удобно, если вы можете использовать другие методы фильтрации из find , например дата модификации, разрешения,…

(Поскольку часто подразумеваются правильно сформированные имена файлов, в противном случае вам нужно использовать нулевые байты в качестве разделителей, что может означать -print0 для find и - null для tar , если поддерживается.)

0
27.01.2020, 19:47

Теги

Похожие вопросы