Как игнорировать файлы / каталоги в "git archive" и создавать только архив подкаталога?

TL;DR: git archive Кажется, что команда архивирует только один подкаталог или придерживается .gitattributes и исключить файлы / каталоги из полученного ZIP, но не может сделать оба.

Скажем, у меня есть такая структура каталогов в моем git-архиве (упрощено для возможности повторного использования):

.
├── assets
├── build
├── CONTRIBUTING.md
├── CONTRIBUTORS
├── LICENSE.md
├── README.md
├── scripts
├── src
│   ├── background
│   ├── common
│   ├── icons
│   ├── _locales
│   ├── manifest.json
│   ├── options
│   ├── popup
│   └── tests
└── tests -> src/tests

Теперь я хочу получить ZIP (или tar) архив со следующим содержимым:

  • содержание src только каталог, так как это исходный код, который я хочу архивировать. Без src непосредственно, однако.
  • внутри этих каталогов я могу игнорировать больше папок и файлов. Например tests должно быть проигнорировано, очевидно.

Итак, в конце концов архив должен выглядеть так:

.
├── background
├── common
├── icons
├── _locales
├── manifest.json
├── options
└── popup

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

Цель также заключается в использовании .gitattributes рекурсивно внутри нескольких подпапок, поэтому я также всегда могу исключить отдельные файлы из архива, не зная структуру верхней папки. (Это полезно для включенных библиотек, например)

Я также заметил, что вам может понадобиться добавить параметр--worktree-attributes так мерзавец поднимает .gitattributes файлы везде, где он его находит. И у меня есть использование ** исключить подкаталоги. Все в порядке.

Итак (для тестирования здесь) я попробовал это:

$ git archive --worktree-attributes --format=tar HEAD:src | tar t

Таким образом, только архивирование подкаталога работает без каких-либо проблем, но исключая файлы, не работает.

Например, я положил это .gitattributes в src каталог:

tests export-ignore
tests/** export-ignore

Теперь, выполнив команду, упомянутую выше, она все еще включает tests DIR содержание. Тем не менее, если я бегу git archive --worktree-attributes --format=tar HEAD | tar t, т.е. не архивировать подкаталог, список заканчивается:

src/popup/[…]
tests

Это означает, что исключает содержание tests реж. По некоторым причинам, это не исключает самого dir, но это может быть другой проблемой на моей стороне.

Напротив, если я положу следующий файл в корневой каталог, весь src/tests dir исключен (хотя я сказал, что они семантически означают одно и то же):

src/tests export-ignore
src/tests/** export-ignore

Моя версия git: 2.17.2
Fedora 28

Редактировать: я заметил, теперь это как-то работает, когда я ставлю .gitattributes файл в корневой каталог, но укажите пути к файлам относительно src реж. Т.е. делать это (также проверено с исключением файлов):

tests export-ignore
tests/** export-ignore
manifest.json export-ignore

... как-то заставляет его работать с src архивная команда. Теперь он больше не работает с архивированием всего каталога (но это нормально). Тем не менее, если я положу этот файл в другом месте (как в src реж) опять не работает…

И так как моя цель состоит в том, чтобы .gitattributes файлы в подкаталогах, чтобы исключить определенные вещи в этих каталогах, это все еще не работает должным образом.

0 ответов

Другие вопросы по тегам