我在GitHub上远程追踪我的master
和development
分支。我该如何同时克隆这两个分支呢?
git clone
命令会下载所有的远程分支,但依然将它们都视为“远程分支”,尽管这些文件已经位于你的新仓库中。但有一个例外,克隆过程会从名为“master”的远程分支创建一个本地分支。默认情况下,git branch
命令只显示本地分支,因此你只看到“master”。
git branch -a
命令会显示所有分支,包括远程分支。
如果你想要在一个分支上工作,你可能需要它的“本地”版本。要简单创建本地分支(不需检出并改变你的工作目录内容),你可以像这样做:
git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree
在这个例子中,branchone
是你基于 origin/branchone
创建的本地分支的名称;如果你想要创建不同名称的本地分支,可以按照以下方式操作:
git branch localbranchname origin/branchone
创建本地分支后,您可以使用git branch
查看它(请记住,您不需要-a
来查看本地分支)。
origin/branchone
存在,您也可以使用git checkout branchone
来创建一个具有相同名称的本地分支,并将其设置为跟踪远程分支。 - Evan这并不太复杂。非常简单和直接的步骤如下:
git fetch origin
: 这将把所有远程分支带到本地。
git branch -a
: 这将显示所有远程分支。
git checkout --track origin/<branch you want to checkout>
通过以下命令验证您是否在所需的分支中;
git branch
输出将会如下所示:
*your current branch
some branch2
some branch3
请注意显示当前分支的 * 标记。
只需执行以下操作:
$ git clone git://example.com/myproject
$ cd myproject
$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'
$ git pull
Already up-to-date.
$ git branch
* branchxyz
master
$ git branch -a
* branchxyz
master
remotes/origin/HEAD -> origin/master
remotes/origin/branchxyz
remotes/origin/branch123
你看,git clone git://example.com/myprojectt
会获取所有东西,甚至包括分支,你只需要检出这些分支,然后你的本地分支就会被创建。
您只需要使用“git clone”命令即可获取所有分支。
git clone <your_http_url>
即使您只看到主分支,也可以使用“git branch -a”命令查看所有分支。
git branch -a
你可以切换到任何你已有的分支。
git checkout <your_branch_name>
不要担心在你执行“git clone”之后,你不需要连接远程仓库。“git branch -a”和“git checkout <your_branch_name>”可以在没有网络连接的情况下成功运行。因此证明当你执行“git clone”时,它已经复制了远程仓库中的所有分支。以后,你就不需要远程仓库了。你的本地代码库已经包含了所有分支的代码。
我看到这里的所有答案都是有效的,但是有一种更干净的方法可以克隆一个存储库并一次性拉取所有分支。
当您克隆一个存储库时,实际上下载了所有分支的信息,但是这些分支是隐藏的。使用以下命令:
git branch -a
你可以展示代码库的所有分支,使用指令
git checkout -b branchname origin/branchname
然后,您可以手动一个接一个地“下载”它们。
然而,如果您想克隆具有大量分支的存储库,则所有以前回答中说明的方式在处理方面都很冗长和繁琐,相比之下,我要展示一种更加清晰快速但有点复杂的方式。您需要三个步骤来完成此操作:
在计算机上创建一个新的空文件夹,并从存储库中克隆 .git 文件夹的镜像副本:
cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
在文件夹my_repo_folder内的本地仓库仍然是空的,现在你可以通过终端使用"ls -alt"命令看到一个隐藏的.git文件夹。
通过将Git配置中的布尔值"bare"切换为false,将该仓库从空(裸)仓库切换为普通仓库:
git config --bool core.bare false
将当前文件夹中的所有内容复制到本地电脑上,并创建所有分支,使之成为一个普通的代码库。
git reset --hard
现在,您只需输入“git branch”命令即可查看所有分支已下载。
这是一种快速的方式,可以一次克隆带有所有分支的Git存储库,但并非您想以这种方式为每个项目执行的操作。
git clone
是复制整个代码库的命令。尝试克隆它,然后运行 git branch -a
命令,可以列出所有分支。如果你想切换到 "foo" 分支而不是 "master" 分支,则使用 git checkout foo
命令。
git clone
确实会下载所有远程分支,但它只会创建master的本地分支。因为git branch
只显示本地分支,所以你需要使用git branch -a
来查看远程分支。 - Cerran如果您正在寻找一个包含所有远程分支和提交日志的自包含克隆或备份,请使用:
git clone http://user@repo.url
git pull --all
git branch -a
命令只会显示远程分支。如果你尝试 checkout
分支,除非你仍然能够连接到原始服务器,否则你将无法进行操作。
来源:Gabe Kopley建议使用git pull --all
。
注:remote/origin
服务器上访问网络,则remote/origin branches
将不会在您的存储库克隆中反映出任何更新。它们的修订版本将反映出您执行上述两个存储库克隆命令的日期和时间提交的内容。$ for i in $(git branch -a |grep 'remotes' | awk -F/ '{print $3}' \
| grep -v 'HEAD ->');do git checkout -b $i --track origin/$i; done
或者
如果你的仓库有嵌套的分支,那么这个命令也会考虑到它们:
for i in $(git branch -a |grep 'remotes' |grep -v 'HEAD ->');do \
basename ${i##\./} | xargs -I {} git checkout -b {} --track origin/{}; done
上述命令将在您的本地git存储库中 checkout
一个名为remote/origin/<branchname>
的本地分支,并设置为--track
远程服务器上的远程分支发生更改,如果您再次访问起点存储库服务器并以通常方式执行git pull
命令。git_remote_branch version 0.2.6
用法:
grb create branch_name [origin_server]
grb publish branch_name [origin_server]
grb rename branch_name [origin_server]
grb delete branch_name [origin_server]
grb track branch_name [origin_server]
注意: - 如果未指定 origin_server,则默认情况下使用名称 "origin" (git 的默认值) - 重命名功能将重命名当前分支
explain 元命令:你还可以在任何命令前面添加关键字“explain”。git_remote_branch将仅输出你需要运行的命令列表,而不会执行该命令。
示例: grb explain create grb explain create my_branch github
所有命令也都有别名: create: create, new delete: delete, destroy, kill, remove, rm publish: publish, remotize rename: rename, rn, mv, move track: track, follow, grab, fetch
#!/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 clone 和 git fetch 命令:许多分支和标签将保持未获取状态。
要获取带有所有分支和标签的副本,请使用以下命令。
git clone --mirror git://example.com/myproject myproject-local-bare-repo.git
获取一个带有所有分支和标记,并且具有工作副本的克隆:
git clone --mirror git://example.com/myproject myproject/.git
cd myproject
git config --unset core.bare
git config receive.denyCurrentBranch updateInstead
git checkout master
git branch -a
)会展示远程仓库中的分支,但是如果你试图检出它们中的任何一个,你将处于'脱离HEAD'状态。第二个最受赞同的回答回答了另一个问题(即如何拉取所有分支,并且再次强调,这仅适用于你在本地跟踪的分支)。其中一些评论指出,你可以使用shell脚本解析git branch -a
的结果来本地跟踪所有远程分支。总结:没有Git原生方法可以实现你想要的功能,而且也许这并不是一个好主意。 - Day Davis Waterburyscp some_user@example.com:/home/some_user/project_folder ~
不确定这种解决方案是否适用于GitHub... - snapfractalpop