Вы когда-нибудь пытались получить папку из 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
Спасибо за прочтение, не стесняйтесь ставить лайк и/или подписываться, чтобы получать больше 🐼.