Вчера я открыл для себя функцию git sparse-checkout
благодаря посту @sanixdarker

- Как клонировать подкаталог git-проекта (не zip)
- darker ・ Aug 12 ・ 2 min read
- Что такое git sparse checkout
- Зачем вам это нужно?
- Интересное чтиво
- Более быстрые git-клоны с разреженными выгрузками | Aymeric Beaumet
- Более быстрые git-клоны с разреженными выгрузками
- Aymeric Beaumet ・ Jul 26 ・ 4 min read
- Как это использовать?
- Начните с git clone minimal fetch
- Разреженная проверка
- Итак, что же делать?
Как клонировать подкаталог git-проекта (не zip)
darker ・ Aug 12 ・ 2 min read
Его статья хороша, и помогла мне обнаружить эту функцию.
Здесь я хотел бы записать для архива то, что я нашел о git sparse-checkout.
.
Что такое git sparse checkout
Вот что о нем рассказывает документация git.
Сокращение рабочего дерева до подмножества отслеживаемых файлов
Итак, если у вас есть такой репозиторий.
README.md
CHANGELOG.md
src/
assests/
tests/
web/
tools
И вы хотите получить только папки src
и tests
, используйте это.
src/
tests/
Потому что другие папки не имеют отношения к вашим потребностям.
Зачем вам это нужно?
При запуске CI вам не нужны активы (изображения, css …), это может ускорить git clone
на огромном репозитории.
НО вы можете добавить коммит и работать как обычно. Вы просто не получили информацию о других папках.
Интересное чтиво
Во-первых, я прочитал эту очень интересную статью

Более быстрые git-клоны с разреженными выгрузками | Aymeric Beaumet
Мы в REKKI работаем над монорепо, которое содержит весь код бэкенда Go для большинства наших сервисов и заданий. С течением времени и ростом размера этого хранилища увеличивается время, необходимое для начальной…

EDIT: вы также можете найти статью о dev to от самого автора @aymericbeaumet

Более быстрые git-клоны с разреженными выгрузками
Aymeric Beaumet ・ Jul 26 ・ 4 min read
и, конечно же, документация https://www.git-scm.com/docs/git-sparse-checkout
Как это использовать?
Начните с git clone minimal fetch
git clone --filter=blob:none --no-checkout <repository>
Можно настроить репозиторий, в котором пока ничего нет (пока — это важно)
-
--filter=blob:none
: предписывает не получать ни одного объекта blob -
--no-checkout
: указывает не производить автоматическую проверку HEAD
Так что здесь вы можете git checkout
вашу ветку, и это не принесет ничего другого, чем если бы вы не использовали --no-checkout
но вместо этого вы можете использовать git sparse-checkout
.
Разреженная проверка
Итак, помните, нам нужны только папки src
и tests
.
Поэтому сделайте следующее:
git sparse-checkout set src tests
Советы Вы можете использовать —stdin
вы также можете использовать --stdin
.
echo -e "srcnassets" | git sparse-checkout set --stdin
Примечание: Здесь используется echo
в качестве примера, использование --stdin
означает, что вы используете сценарий.
Примечание: Вы также можете добавлять по мере необходимости.
git sparse-checkout set src
# ...
# and later, even days later
git sparse-checkout add tests
# and here it would fetch the missing files
Примечание: Вы также можете использовать --stdin
с git sparse-checkout add
также
Совет: используйте список git sparse-checkout, чтобы знать, что вы отслеживаете.
Вы можете использовать git sparse-checkout list
в любое время, чтобы посмотреть, что настроено.
git sparse-checkout list
src
tests
Как git следит за этим внутренне
вы можете найти настроенные вещи в файле .git/info/sparse-checkout
/*
!/*/
/src/
/tests/
Примечание: есть и другие файлы, участвующие в sparse checkout, вы можете прочитать документацию.
Предупреждение: Я бы рекомендовал использовать команду git sparse-checkout
, чем играть с этими файлами напрямую.
Итак, что же делать?
Ну, вы можете просто получить и проверить вашу ветку, только нужные папки или файлы будут присутствовать.
README.md
CHANGELOG.md
src/
tests/
whatever/
foobar/
git sparse-checkout set src tests
Если вы выберете ветку main
, то получите следующее.
git checkout main
README.md
CHANGELOG.md
src/
tests/
Примечание: по умолчанию все файлы (только файлы, не папки) в корне вашего хранилища всегда будут проверяться. Причину этого вы можете найти в документации.
Если вы не хотите этого, вам придется использовать унаследованную функцию через параметр --no-cone
при настройке разреженной проверки
git sparse-checkout set --no-cone src tests
тогда при оформлении заказа вы получите следующее.
src/
tests/
Надеюсь, вы найдете это полезным.