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.

Ответ 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

Затем перейдите/где-нибудь/еще и запустите там новое репо.