我有一个 "master "和一个 "development "分支,都推送到GitHub。我已经clone'd、
pull'ed和fetch'ed,但除了
master'分支外,我仍然无法取回其他东西。
我确信我错过了一些明显的东西,但我读了手册,却没有得到任何好处。
首先,克隆一个远程的 [Git][1] 仓库,并将 [cd][2] 复制到其中。
$ git clone git://example.com/myproject
$ cd myproject
接下来,看看你的版本库中的本地分支。
$ git branch
* master
但是在你的版本库中还隐藏着其他的分支!你可以通过-a
标志来查看这些分支。
您可以使用-a
标志来查看这些分支。
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
如果你只是想快速浏览一下上游分支,可以直接查看。
$ git checkout origin/experimental
但如果你想在该分支上工作,你需要创建一个本地跟踪分支,这是由。
$ git checkout experimental
你会看到
Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'
最后一句话抛给了一些人。 "新分支"。
现在,如果你看看你当地的分支机构,这是你'会看到的。
$ git branch
* experimental
master
实际上,您可以使用 "git remote "跟踪多个远程仓库。
$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
remotes/origin/HEAD
remotes/origin/master
remotes/origin/v1.0-stable
remotes/origin/experimental
remotes/win32/master
remotes/win32/new-widgets
此时,事情变得相当疯狂,所以跑gitk
看看发生了什么'。
$ gitk --all &
[1]: http://en.wikipedia.org/wiki/Git_%28software%29 [2]: http://en.wikipedia.org/wiki/Cd_%28command%29
这个[Bash][1]脚本帮我解决了问题。
#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
git branch --track "${branch##*/}" "$branch"
done
它将为所有远程分支创建跟踪分支,除了主分支(你可能从原始克隆命令中获得)。 我想你可能还需要做一个
git fetch --all
git pull --all
可以肯定的是。
一句话.Git branch -a | grep -v HEAD | perl -ne 'chomp($;) `git branch -a | grep -v HEAD | perl -ne 'chomp($); s|^/*?\s||; 如果 (m|(.+)/(.+)| &&.not $d{$2}); s|^? not $d{$2}) {print qq(git branch --track $2 $1/$2/\n)} else {$d{$_}=1}' | csh -xfs` 像往常一样。 在复制 rm -rf universe as we know it 之前,先在你的设置中进行测试。
单行线的功劳归用户cfi。
使用"--镜像 "选项似乎可以正确复制 "远程 "跟踪分支。 然而,它将版本库设置为裸库,所以你必须在之后将其转回普通版本库。
git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch
参考文献。 Git FAQ: 如何克隆一个包含所有远程跟踪分支的版本库? ](https://git.wiki.kernel.org/index.php/Git_FAQ#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F)
你可以很容易地切换到一个分支,而不需要使用花哨的"git checkout -b somebranch origin/somebranch"。 语法。 你可以直接这样做。
git checkout somebranch
Git会自动做正确的事情。
$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'
Git 会检查是否有一个同名的分支存在于一个远程分支中,如果有,它就会像你明确指定它是远程分支一样跟踪它。 从Git 1.8.2.1的git-checkout手册中可以看出。
如果<分支> 没有被找到,但确实有一个跟踪分支存在于
恰好一个遥控器(叫它<remote>)的名字相匹配,视为 相当于
$ git checkout -b < branch> --track
/<branch>。
git clone
会下载所有远程分支,但仍然认为它们是"远程",即使文件位于你的新仓库中。
有一个例外,那就是克隆过程会创建一个名为"master"的本地分支。
从远程分支"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
来查看本地分支)。
这并不是太复杂,非常简单直接的步骤如下。
git fetch origin
这将把所有的远程分支带到你的本地。
git branch -a
这将显示所有的远程分支。
git checkout --track origin/<你想检查的分支>
。
用下面的命令验证你是否在所需的分支中。
git branch
输出将是这样的。
*your current branch
some branch2
some branch3
请注意*号,表示当前的分支。
迟到总比没有好,但这里有一个最好的方法。
mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard
这时你就有了一个完整的远程仓库的副本,包括它的所有分支(用git branch
验证)。
如果你的远程仓库有自己的远程仓库,你可以用 --mirror
代替 --bare
。
就这样做。
$ 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"之后,你不需要连接远程repo,"git branch -a"
和"git checkout
git clone
应该是复制整个版本库。 试着克隆它,然后运行 git branch -a
。 它应该列出所有的分支。 如果你想切换到"foo"分支,而不是"master",使用git checkout foo
。
使用我的工具 [git_remote_branch][1] (你需要在你的机器上安装 Ruby)。 它是专门为了让远程分支操作变得非常简单而设计的。
每当它代表你做一个操作时,它都会在控制台用红色打印出来。 随着时间的推移,它们最终会深深地印在你的脑海里:-)
如果你不想让 grb 代你执行命令,只需使用 'explain' 功能。 这些命令将被打印到你的控制台,而不是为你执行。
最后,所有命令都有别名,以便于记忆。
注意,这是[alpha软件][1];-)
这里是你运行grb help时的帮助。
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_remote_branch 将简单地输出你需要运行的命令列表,以实现 该目标。
例子。 grb解释创建 grb解释 创建 my_branch github
所有命令也都有别名。 create: create, new 删除。 删除、销毁、删除、删除、清除、rm 发布,发布。 发布,调整 重命名。 rename, rn, mv, move。 跟踪: 跟踪,跟随,抓住,取回
[1]: http://programblings.com/2008/08/06/time-to-git-collaborating-with-git_remote_branch/
我在这里看到的所有答案都是有效的,但有一个更干净的方法来克隆一个版本库,并一次性提取所有分支。
当你克隆一个版本库时,所有分支的信息都会被下载,但分支是隐藏的。 使用命令
$ git branch -a
你可以显示版本库的所有分支,并使用命令
$ git checkout -b branchname origin/branchname
然后你可以"下载"。 一次一个手动下载。
然而,当你想克隆一个有很多分支的repo时,上面所说明的所有方法都是冗长和繁琐的,而我要展示的是一种更清洁和更快速的方法,虽然它'是有点复杂。 你需要三个步骤来完成。
第一步
在你的机器上创建一个新的空文件夹,然后从版本库中克隆一个.git文件夹的镜像副本。
$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
My_repo_folder文件夹内的本地仓库仍然是空的,现在只有一个隐藏的.git文件夹,你可以用"ls -alt".命令从终端看到。 命令就可以看到了。
2.第二步
通过将 git 配置中的布尔值 "bare".切换为 false,将此版本库从空版本库切换为普通版本库。 的布尔值改为false,就可以把这个仓库从空仓库(裸仓库)切换到普通仓库。
$ git config --bool core.bare false
抓取当前文件夹中的所有内容,并在本地机器上创建所有的分支,从而使其成为一个普通的repo。
$ git reset --hard
所以现在你只需要输入命令"git branch"。 你就可以看到所有的分支都被下载了。
这是一种快速的方式,你可以一次性克隆一个包含所有分支的git仓库,但这并不是你想对每个项目都这样做。
使用 git clone &.从本地 repo 克隆将无法工作。 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
好的,当你克隆你的repo时,你的所有分支都在那里......如果你只是做 "git branch",它们会被隐藏起来......。
如果你只做 "git branch",它们就会被隐藏起来......。
所以如果你想看到所有分支的名字,只需简单地添加--all
标志,像这样。
git branch --all
或git branch -a
。
如果你只是签出到分支,你就会得到你所需要的一切。
但如果你克隆后,别人创建的分支呢?
在这种情况下,只要做
git fetch
并再次检查所有分支...
如果你喜欢同时取回和签出,你可以这样做。
git fetch && git checkout your_branch_name
。
还制作了下面的图片给你,以简化我说的内容。
[! [git branch --all to get all branches][2]][2]