首页 > 解决方案 > 一次创建所有分支时出错

问题描述

我创建了这个 bash 脚本来一次创建所有分支

#!/bin/bash
git fetch -vp
for b in $(git branch -a | grep remotes | grep -v HEAD)
do
    branchname=${b##*/}
    remote=${b#*/}
    command="git branch --track $branchname $remote"
    echo "$command"
    $($command)
done

但我总是有同样的错误:

fatal: 'master' is not a valid branch name.

如果我在没有脚本的情况下运行相同的命令,则它会成功执行。

我究竟做错了什么 ?

标签: bashgit

解决方案


我创建了这个脚本,因为我需要将所有分支推送到另一个远程仓库,所以首先我需要从原始存储库创建所有本地分支......

你没有。

您可以使用已有的远程跟踪分支git fetch。就像origin/master. git fetch已经从远程下载了所有提交,Git 中的分支只是提交上的标签。甚至是远程分支。

您可以从所有远程跟踪分支中获取所有远程跟踪分支git branch -r列表。获取分支仅用于一次远程使用git ls-remotes --heads <remote>。格式有点搞笑,所以你必须做一些按摩。

$ git ls-remote --heads $REMOTE | cut -f2 | sed -E "s/refs\/heads/$REMOTE/"
origin/80_method_methods
origin/gh-pages
origin/io-all
origin/issue/217
origin/issue/255
origin/master
origin/rewrite_cmd_wrapper

然后你可以从那些分支推送。


虽然想要将所有分支从一个仓库推送到另一个仓库是很奇怪的。可能有一种更简单的方法可以解决您要解决的任何问题。我怀疑你有一个 XY 问题

我建议改为询问有关该问题的问题。


推荐阅读