我的主分支和开发分支在GitHub上被远程跟踪。如何克隆这两个分支?
当前回答
如果您有许多远程分支要同时获取,请执行以下操作:
git pull --all
现在,您可以根据需要签出任何分支,而无需访问远程存储库。
注意:这不会创建任何未签出分支的工作副本,这就是问题所在。对此,请参见
大鱼的回答戴夫的回答
其他回答
我正在用Python和Pytest从Udemy课程Elegant Automation Frameworks中克隆一个存储库,以便以后可以离线查看。我尝试下载zip,但这只适用于当前分支,因此这是我的2美分。
我在Windows上工作,显然,我求助于Windows Subsystem for Linux中的Ubuntu shell。克隆完成后,我的分支如下:
$ git clone https://github.com/BrandonBlair/elegantframeworks.git
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/config_recipe
remotes/origin/functionaltests
remotes/origin/master
remotes/origin/parallel
remotes/origin/parametrize
remotes/origin/parametrize_data_excel
remotes/origin/unittesting
remotes/origin/unittesting1
然后,在撞了几块几位数的结账砖墙之后,我终于明白了:
$ for b in `git branch -a | cut -c18- | cut -d\ -f1`; do git checkout $b; git stash; done
在此之后,以下是我的分支:
$ git branch -a
config_recipe
functionaltests
master
parallel
parametrize
parametrize_data_excel
unittesting
* unittesting1
remotes/origin/HEAD -> origin/master
remotes/origin/config_recipe
remotes/origin/functionaltests
remotes/origin/master
remotes/origin/parallel
remotes/origin/parametrize
remotes/origin/parametrize_data_excel
remotes/origin/unittesting
remotes/origin/unittesting1
我的是物理的,去掉了最初的遥控器/原点,然后过滤空间分隔符。可以说,我本可以把HEAD去掉,只剪一刀,但我会留给评论。
请注意,您当前的分支机构现在是列表中的最后一个。如果你不知道这是为什么,那你的处境就很艰难。现在你想要什么就结账吧。
#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
git branch --track ${branch#remotes/origin/} $branch
done
这些代码将把所有远程分支代码拉到本地存储库。
如果您有许多远程分支要同时获取,请执行以下操作:
git pull --all
现在,您可以根据需要签出任何分支,而无需访问远程存储库。
注意:这不会创建任何未签出分支的工作副本,这就是问题所在。对此,请参见
大鱼的回答戴夫的回答
这是一个使用awk的答案。如果在新的回购协议中使用,这种方法就足够了。
git branch -r | awk -F/ '{ system("git checkout " $NF) }'
现有的分支将被简单地签出,或者声明为已经在其中,但是可以添加过滤器以避免冲突。
还可以修改它,以便调用显式git checkout-b<branch>-t<remote>/<branch>命令。
这个答案符合尼科斯·C的想法。
或者,我们可以指定远程分支。这是基于murphytalk的答案。
git branch -r | awk '{ system("git checkout -t " $NF) }'
它会对冲突发出致命的错误消息,但我认为它们是无害的。
这两个命令都可以别名。
使用nobody的答案作为参考,我们可以使用以下命令来创建别名:
git config --global alias.clone-branches '! git branch -r | awk -F/ "{ system(\"git checkout \" \$NF) }"'
git config --global alias.clone-branches '! git branch -r | awk "{ system(\"git checkout -t \" \$NF) }"'
就我个人而言,我会使用跟踪所有分支或跟踪所有分支。
git克隆应该复制整个存储库。尝试克隆它,然后运行gitbranch-a。它应该列出所有分支。如果您想切换到分支“foo”而不是“master”,请使用git checkout foo。
推荐文章
- 当git说它正在“解析delta”时,它实际上在做什么?
- Git命令将一个文件夹移动到另一个文件夹
- 在单个文件中重新启动/撤消冲突解决方案
- Visual Studio代码如何解决合并冲突与git?
- 无法推送到远程分支,无法解析到分支
- Git:如何将数据库重置为特定的提交?
- 如何在合并期间使用Git和命令行保存本地文件或远程文件?
- 能够用一个命令推到所有git遥控器?
- 重新基于Git合并提交
- 忽略已经签入目录的内容?
- 如何从windows cmd保存git提交消息?
- (Mac) -bash: __git_ps1:命令未找到
- 如何删除多个已删除的文件在Git仓库
- 使用vimdiff查看所有' git diff '
- 如何拉特定的目录与git