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 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, он будет автоматически запускать ваш скрипт.

Другие вопросы по тегам