Cloning только подкаталог с git
У меня есть репозиторий git, который включает подкаталоги. Пример dirA/dirB.
Есть ли способ сделать git clone
на сервере Unix, чтобы вытаскивать только файлы из подкаталога (dirB)?
Есть ли какая-нибудь другая команда git, отличная от clone, которая сделает это?
Как я могу git указать конкретный файл?
Ответы
Ответ 1
Если вы хотите клонировать только части вашего репозитория, вы должны посмотреть git подмодули.
Подкаталог управляется конкретным репозиторием git и упоминается в основном репозитории как подмодуль.
Когда вы клонируете основной репозиторий, подмодули не будут автоматически клонированы.
Ответ 2
Предположим, что ваш проект находится в директории project
, и вам нужны только те коммиты, которые касаются project/dirB
.
Тогда:
git clone project/ subproject/
cd subproject
git filter-branch --prune-empty --subdirectory-filter dirB HEAD
subproject
теперь будет содержать историю git, которая коснется dirB
.
Ответ 3
Cf https://www.kernel.org/pub/software/scm/git/docs/git-archive.html
С командой оболочки:
git archive --remote=<repo_url> <branch> <path> | tar xvf -
Ответ 4
Я хотел бы поделиться обходным решением. Вы можете клонировать все репо, а затем создать symulink для подкаталога:
mkdir <repo_dir>
cd <repo_dir>
git clone <repo_url>
ln -s <sub_dir> <your_location_where_you_want_to_checkout_sub_dir>
Опять же, это не решение - просто обходной путь. Вы по-прежнему будете клонировать все репо, и вы можете изменять только изменения. Однако это было полезно в моем случае.
Ответ 5
Git работает на уровне репозитория. Вы не сможете выбрать только подкаталог. Если репозиторий, который вас интересует, имеет веб-интерфейс, вы можете перейти в свой подкаталог и захватить его.
Ответ 6
Это не клонирование, но если вы просто хотите, чтобы часть проекта начала новое репо, зайдите в свое репо и
git archive master <subdir> | tar -x -C /somewhere/else
Затем перейдите/где-нибудь/еще и запустите там новое репо.