我已创建此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.
如果我在没有脚本的情况下运行相同的命令,则它会成功执行。
我做错了什么?
答案 0 :(得分:3)
我已创建此脚本,因为我需要将所有分支机构推送到另一个远程仓库,因此首先我需要从原始存储库创建所有本地分支...
你没有。
您可以使用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
然后你就可以从这些分支机构推出。
虽然想要将所有分支从一个回购推到另一个回购非常奇怪。可能有一种更简单的方法可以解决您尝试解决的任何问题。我怀疑你有an XY Problem。
我建议改为询问有关该问题的问题。
答案 1 :(得分:0)
正如@ Schwern的回答中所说,希望&#34;检查所有分支机构&#34;远程仓库的问题可能是一个XY问题,在实践中它是不必要的,因为git fetch $REMOTE
足以检索所考虑的仓库的整个历史记录。
然而,建议的命令git ls-remote ...
似乎不合适,因为:
为了有效地从给定的遥控器获取所有分支的列表,我建议:
git for-each-ref --format "%(refname:strip=2)" "refs/remotes/$REMOTE/" | grep -v -e '/HEAD$'