Відповіді:
Подивіться спочатку git help archive
. archive
- це команда git, яка дозволяє робити архіви, що містять лише відсліджені файли git. Напевно, що ви шукаєте. Один приклад, наведений в кінці сторінки man:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
Найпростіша відповідь: Додати --exclude-vcs
. Це виключає всі каталоги систем управління версіями
Особисто я використовую
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
тому все, що вам потрібно зробити, це додати --exclude-vcs
в кінці команди.
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Якщо ви хочете, щоб архів включав файли, відслідковувані git, але не саме сховище git або будь-який створений або іншим чином відслідкований файл, тоді використовуйтеgit archive
.
Якщо ви спеціально хочете виключити .git
але включити все інше, під Linux або FreeBSD, OSX або Cygwin, tar має простий варіант виключення каталогу:
tar -c --exclude .git -f - foo | gzip >foo.tgz
За допомогою GNU tar (тобто під Linux або Cygwin) ви можете скоротити це до tar czf foo.tgz --exclude .git foo
.
POSIX спосіб створення архівів - це pax
.
pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz
git
компілюється в будь-якій системі, де tar
вона недоступна? :-)
tar
немає жодної --exclude
опції, наприклад OpenBSD (яка, мабуть, дублює s
параметр pax , але це не звичайне розширення синтаксису команди tar).
Завдяки відповіді, яку я отримав на одне із своїх питань, я з’ясував інше рішення. Отже, для повноти, ось рішення, яке використовує find
:
find . -path './.git' -prune -o -print |
tar -czvf ../archive.tgz --no-recursion -T -
І якщо ви хочете виключити можливі .git
папки всередині (під) + папки:
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
якщо вони підтримуються.)