git sparse-checkout

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

Его статья хороша, и помогла мне обнаружить эту функцию.

Здесь я хотел бы записать для архива то, что я нашел о 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 для большинства наших сервисов и заданий. С течением времени и ростом размера этого хранилища увеличивается время, необходимое для начальной…

aymericbeaumet.com

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

Более быстрые git-клоны с разреженными выгрузками

Aymeric Beaumet ・ Jul 26 ・ 4 min read

#git #производительность

и, конечно же, документация 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/
Войти в полноэкранный режим Выйти из полноэкранного режима

Надеюсь, вы найдете это полезным.

Оцените статью
devanswers.ru
Добавить комментарий