git克隆所有分支bash脚本作为git别名

时间:2016-09-30 18:02:52

标签: git bash git-branch git-clone git-alias

我想创建一个 git别名 克隆所有分支

我们有bash脚本,感谢这篇文章: How to clone all remote branches in 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脚本作为&#34; git别名&#34;回答如下。

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

创建&#34; git别名&#34;这将运行一个脚本:

$ 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

2 个答案:

答案 0 :(得分: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 a&#34; git别名&#34; -OR - #5 a&#34; bash别名&#34;

#4 创建&#34; git别名&#34;这将允许您作为git命令运行此脚本:

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

选择一个 A -OR - B 创建 git别名的方法(&#34 ; bash别名&#34;是#5):

(答:通过终端)

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

  • (注意:如果一个repo尚不存在,请执行一个正常的&#34; git clone git @ ...&#34;命令,它将首先克隆master分支,然后再使用新的&#34; git clone-all-branches&#34;命令将起作用。)

查看当前分支机构:

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

尝试新的git别名:

$ git clone-all-branches

再次查看分支:

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

#5 或者,创建一个&#34; bash别名&#34;运行我们的.gitcloneallbranches.sh脚本:

  • [而不是#4,打开.bashrc(或.bash_profile或.profile)]:

$ subl .bashrc

在该文件中,添加&#34;别名&#34;添加以下内容:

# 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所在的目录。

  • (注意:如果一个repo尚不存在,请执行一个正常的&#34; git clone git @ ...&#34;命令,它将在我们的新&#34;克隆之前首先克隆master分支-all-branches&#34;命令将起作用。)

查看当前分支机构:

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

尝试新的git别名:

$ clone-all-branches

再次查看分支:

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

答案 1 :(得分:0)

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