git clone все ветки bash скрипт как псевдоним git
Я хотел бы создать псевдоним git, который клонирует все ветви.
У нас есть скрипт bash, благодаря этому посту: Как клонировать все удаленные ветви в Git?
Вот скрипт bash (многострочная версия):
#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
git branch --track "${branch##*/}" "$branch"
done
(однострочная версия):
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
Давайте назовем псевдоним Git git cloneallbranches
Я попытался установить как однострочные, так и многострочные версии, используя:
$ git config --global alias.cloneallbranches '...'
и попытался вставить обе версии в мой файл.gitconfig безуспешно (у меня есть другие псевдонимы git, но ни одна из них не является сценарием bash).
Может кто-нибудь помочь мне изменить скрипт bash, чтобы я мог вставить его в свой файл.gitconfig, чтобы псевдоним git работал правильно?
Спасибо.
ОТВЕТ:
Выполнение отдельного скрипта bash в качестве ответа "git alias" в ответе ниже.
Тем не менее, для тех, кто хочет быстрый способ добавить псевдоним git, $ git clone-all-branches
вот ответ:
- Благодаря обновленному ответу здесь: Как клонировать все удаленные ветки в Git?
Создайте "псевдоним git", который будет запускать скрипт:
$ git config --global alias.clone-all-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
Теперь вы можете запустить (из любого каталога, в котором есть git-репо):
$ git clone-all-branches
2 ответа
Благодаря предложению @g-sliepen я сделал следующее:
Для Ubuntu:
# 1 Перейти в домашний каталог:
`$ cd ~`
Примечание: должен быть тот же каталог, что и файлы.gitconfig и.bashrc, которые вам понадобятся в ближайшее время.
# 2 Создайте новый файл, скрипт bash, который мы выполним позже (убедитесь, что вы находитесь в домашнем каталоге):
`$ touch .gitcloneallbranches.sh`
Откройте файл:
`$ subl .gitcloneallbranches.sh`
Вставьте и сохраните следующее в вашем файле:
# Bash script that we will execute as an "alias" either as a "git alias" or a "bash alias"
#!/bin/bash
git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs`
# 3 Дайте этому файлу разрешения, которые должны быть выполнены:
`$ chmod u+x .gitcloneallbranches.sh`
Используйте скрипт как #4 "псевдоним git" -ИЛИ- как #5 "псевдоним bash"
#4 Создайте "псевдоним git", который позволит вам запустить этот скрипт как команду git:
- [Перейдите к #5, если вы предпочитаете псевдоним bash]
Выберите один из A -OR- способов создания псевдонима git ("псевдоним bash" #5):
(A: через терминал)
$ git config --global alias.clone-all-branches '!sh ~/.gitcloneallbranches.sh'
(ИЛИ, B: или, добавьте псевдоним непосредственно в файл.gitconfig:)
В домашнем каталоге откройте.gitconfig:
$ subl .gitconfig
В разделе [alias] вставьте следующее:
[alias]
clone-all-branches = !sh ~/.gitcloneallbranches.sh
Попробуйте наш псевдоним git!
Перейдите в каталог, где находится ваше git-репо.
- (Примечание: если репозиторий еще не существует, выполните обычную команду "git clone git @...", которая сначала клонирует ветку master, прежде чем сработает наша новая команда "git clone-all-branch".)
Просмотр текущих веток:
$ git branch
// Должны быть доступны текущие ветки
Попробуйте наш новый псевдоним git:
$ git clone-all-branches
Еще раз просмотрите ветки:
$ git branch
// Все ветки теперь доступны!
#5 Или создайте псевдоним bash для запуска нашего сценария.gitcloneallbranches.sh:
- [Вместо #4 откройте.bashrc (или.bash_profile или.profile)]:
$ subl .bashrc
Внутри этого файла добавьте псевдоним, добавив следующее:
# Adds ability to clone all branches of a repo, by typing 'clone-all-branches' in any directory with a git repo:
alias clone-all-branches='source ~/.gitcloneallbranches.sh'
Попробуйте наш псевдоним bash!
Перейдите в каталог, где находится ваше git-репо.
- (Примечание. Если репозиторий еще не существует, выполните обычную команду "git clone git @...", которая сначала клонирует основную ветвь, прежде чем сработает наша новая команда "клонировать все ветки".)
Просмотр текущих веток:
$ git branch
// Должны быть доступны текущие ветки
Попробуйте наш новый псевдоним git:
$ clone-all-branches
Еще раз просмотрите ветки:
$ git branch
// Все ветки теперь доступны!
Есть альтернативный способ: просто создайте скрипт с именем git-cloneallbranches
что живет где-то в вашем $PATH
(например, если у вас есть $HOME/bin
в вашем $PATH
, это может быть хорошим местом). Когда ты бежишь git cloneallbranches
, он будет автоматически запускать ваш скрипт.