git 多个遥控器的分支

git branch for multiple remotes

当 运行 git branch -r 我看到我的远程存储库上的分支。 有没有办法在同一个工作目录下查看多个存储库的分支? 我的目标是创建一个文件,列出几个存储库中的所有分支,如下所示:

repo1:master,dev,qa,fy-2473
repo2:master,dev,fy-1128,staging
repo3:master,fy-1272,staging

依此类推。 我有这个以正确的方式打印分支:

git branch -r | awk -F' +|/' -v ORS=, '{if(!="HEAD") print }' >> repolist.txt

我只需要让此功能与几个存储库一起使用,而不必为此单一目的克隆每个存储库。 谢谢

您可以使用 git remote add name url 将存储库添加到同一工作目录,然后您将在 git branch -r.

中看到所有存储库

例如:

git remote add repo1 http://github.com/example/foo.git
git remote add repo2 http://bitbucket.com/example/bar.git
git fetch --all
git branch -r

将列出:

repo1/master
repo1/dev
repo2/master
repo2/featureXYZ

在你运行git remote add添加所有远程仓库,运行git fetch获取/更新远程仓库信息后,git branch -a会显示所有分支机构,包括远程和本地分支机构。对于远程分支,它将以格式显示为:

remotes/{remote_name}/{branch_name}

使用 git remote add 将您的存储库作为遥控器添加到您的本地存储库,然后 git fetch --all 它们并调整您的 awk 命令以产生您想要的结果。

此命令将产生您期望的输出

git branch -r | awk '
    # split remote and branch
    {
        remote = substr(, 0, index(, "/") - 1)
        branch = substr(, index(, "/") + 1)
    }

    # eliminate HEAD reference
    branch == "HEAD" { next }

    # new remote found
    remote != lastRemote {
        # output remote name
        printf "%s%s:", lastRemote ? "\n" : "", remote
        lastRemote = remote
        # do not output next comma
        firstBranch = 1
    }

    # output comma between branches
    !firstBranch { printf "," }
    firstBranch { firstBranch = 0 }

    # output branch name
    { printf branch }

    # final linebreak
    END { print "" }
'

或单行无评论

git branch -r | awk '{ remote = substr(, 0, index(, "/") - 1); branch = substr(, index(, "/") + 1) } branch == "HEAD" { next } remote != lastRemote { printf "%s%s:", lastRemote ? "\n" : "", remote; lastRemote = remote; firstBranch = 1; } !firstBranch { printf "," } firstBranch { firstBranch = 0 } { printf branch } END { print "" }'