Как клонировать подкаталог git-проекта (не zip)

Вы когда-нибудь пытались получить папку из git-репозитория на github, gitlab или bitbucket?

Хоп-хоп-хоп, я не говорю о скачивании ZIP-папки (как это делает DownGit), а только о клонировании подкаталога с помощью команды git clone… !

Я получил этот вопрос от друга, и я написал небольшой и интересный bash скрипт для этого!

Мы собираемся сделать это в 2 шага.

НАПИСАТЬ ФУНКЦИЮ BASH-СКРИПТА

Мы собираемся написать функцию в нашем .bashrc, которая будет обновлять наш sparse-checkout следующим образом:

_git_clone_sub ()
{
    REPO_NAME="$(echo $2 | grep -oE '[^/]+$')";
    git clone --filter=blob:none --no-checkout $2
    cd $REPO_NAME;
    git sparse-checkout set --no-cone "$1/*"
    if [ -n "$3" ]; then
        git pull origin $3;
        git checkout $3;
    else
        git fetch origin;
        git checkout main
        [[ $? != 0 ]] && git checkout master;
    fi
}
Войти в полноэкранный режим Выйти из полноэкранного режима

Этот скрипт довольно прост, вот что он делает:

  • Извлекает имя репозитория из ссылки (github.com/author/repo-name).
  • Создайте git-проект с именем репо + добавьте origin из ссылки.
  • Затем обновляем конфигурацию дерева нашего проекта.
  • В качестве необязательного параметра у нас есть ветка, если она указана, скрипт будет клонировать подкаталог из этой ветки, в противном случае он будет клонировать из master (вы можете изменить это на main, если хотите).

Теперь мы можем легко клонировать подкаталоги следующим образом (после source ~/.bashrc) :

_git_clone_sub subDir1 https://github.com/auth/repo
Войти в полноэкранный режим Выйти из полноэкранного режима

или указав имя ветки :

_git_clone_sub subDir1 https://github.com/auth/repo dev-branch
Войти в полноэкранный режим Выйти из полноэкранного режима

НАПИСАТЬ ПСЕВДОНИМ GIT

Пока все хорошо… но мы можем сделать лучше!
Мы можем вызвать эту функцию bash из git напрямую, добавив псевдоним в наш файл ~/.gitconfig вот так :

[alias]
    clone-sub = !bash -i -c '_git_clone_sub "$@"' -s
Войти в полноэкранный режим Выйти из полноэкранного режима

Да, да, подождите минутку, я знаю, это выглядит странно, но позвольте мне объяснить… на самом деле все просто!

Во-первых, поскольку мы собираемся запустить функцию bash, мы запускаем ее с помощью ‘bash -c’; затем мы вызываем нашу функцию.
$@ — это получение всех аргументов, полученных с помощью флага -s в конце псевдонима.

Это было сказано, теперь вы можете сделать :

git clone-sub subDir1 https://github.com/auth/repo
Войти в полноэкранный режим Выйти из полноэкранного режима
git clone-sub subDir1 https://github.com/auth/repo dev-branch
Войти в полноэкранный режим Выйти из полноэкранного режима

DEMO

Спасибо за прочтение, не стесняйтесь ставить лайк и/или подписываться, чтобы получать больше 🐼.

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