Клонирование только определенной директории

Рейтинг: 4Ответов: 1Опубликовано: 25.03.2015

Подскажите, как-то можно в git клонировать не весь проект ветки master, а только 1 директорию из этой ветки? И в дальнейшем работать с ней?

Ответы

▲ 4

Насколько я знаю, скачивать придётся всё равно весь master. Но можно чтобы "распаковывались" не все файлы.

git init имяреп
cd имяреп
git remote add origin ссылка
git fetch

На этом этапе master (и все другие ветви) будут скачаны, но не распакованы.

Теперь включим спецрежим:

git config core.sparseCheckout true

Укажем какие файлы мы хотим

echo вот/этот/каталог >> .git/info/sparse-checkout

И распакуем файлы:

git checkout origin/master -B master

В итоге вот/этот/каталог/файл.txt попадёт в рабочий каталог, а не/тот/каталог/файл.txt нет.

Если в репозитории много ветвей и нужно экономить траффик, можно скачивать не все (например, после git remote add изменить файл .git/config, чтобы было не fetch = +refs/heads/*:refs/remotes/origin/*, а только fetch = +refs/heads/master:refs/remotes/origin/master), а также скачивать не всю историю (git fetch --depth=50).