1

我想创建一个克隆所有分支的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 别名”答案。

但是,对于那些想要快速添加 git 别名的人,$ git clone-all-branches这里有一个答案:

创建一个“git alias”,它将运行一个脚本:

$ git config --global alias.clone-all-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

现在你可以运行(从任何有 git repo 的目录):

$ git clone-all-branches

4

2 回答 2

1

感谢@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 命令运行:

  • [如果您更喜欢 bash 别名,请跳至 #5]

选择一种 A -OR- B方法来创建git 别名(“bash 别名”是 #5):

(A:通过终端)

$ git config --global alias.clone-all-branches '!sh ~/.gitcloneallbranches.sh'

(OR,B:或者,直接在 .gitconfig 文件中添加别名:)

在主目录中,打开 .gitconfig:

$ subl .gitconfig

在 [alias] 部分下,粘贴以下内容: [alias] clone-all-branches = !sh ~/.gitcloneallbranches.sh

试试我们的 git 别名!

转到您的 git 存储库所在的目录。

  • (注意:如果 repo 尚不存在,请执行正常的“git clone git@...”命令,这将首先克隆 master 分支,然后我们的新“git clone-all-branches”命令将起作用。)

查看当前分支:

$ 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 存储库所在的目录。

  • (注意:如果 repo 尚不存在,请执行正常的“git clone git@...”命令,这将首先克隆 master 分支,然后我们的新“clone-all-branches”命令将起作用。)

查看当前分支:

$ git branch // 应该是当前可用的分支

试试我们的新 git 别名:

$ clone-all-branches

再次查看分支:

$ git branch// 现在所有分支都可用!

于 2016-10-29T21:58:48.637 回答
0

还有另一种方法:只需创建一个名为的脚本,该脚本git-cloneallbranches位于您的某处$PATH(例如,如果您的$HOME/bin. 中有$PATH,那可能是一个好地方)。当您运行git cloneallbranches时,它将自动运行您的脚本。

于 2016-09-30T18:07:23.967 回答