这里有几个独立但交织在一起的关键概念。
首先是,虽然Git有分支名称,那是不是所有的Git有(为此事,术语分支是模糊的:又见What exactly do we mean by "branch"?)。 Git也有标签以及Git所称的远程跟踪分支名称,这些都属于一个通用类别,称为,参考文献。
像master
一个分支的名字仅仅是一个参考,其全名与refs/heads/
开始。
origin/iOS
等的远程跟踪分支名是参考其全名与refs/remotes/
开始,接着由远程本身(origin
)和另一斜杠的名称。该最后部分,iOS
,是你的Git通常副本从另一个Git。
(这样做的远程部分是一个几乎任意字符串。你可以发明自己的远程名称。但是,遥控器的名称获取以后添加的斜线是依赖于你应该是理由的事实小心在远程名称中使用斜线。)
要完成这个特殊的名单,像v1.0
标签名称是一个简单的引用,其全名与refs/tags/
开始。还有更多的引用形式(refs/notes/
用于Git的git notes
,而GitHub用例子为refs/pull/
),但分支,标签和远程跟踪分支都内置,标准的,最重要的是,高度可见 - 所以你应该知道关于他们。
当您运行git branch
,Git会找到你所有的refs/heads/
参考名称,并显示它们与refs/heads/
剥离。当您运行git branch -r
时,Git会查找您所有的refs/remotes/
引用,并将它们与refs/remotes/
一起剥离。当你运行git branch -a
时,Git发现了这两个,并且显示第一个被剥离的refs/heads/
,但是显示第二个被剥离了refs/
。 (?!为什么谁知道这是Git的是gitty :-))。
这就解释了为什么你看到你所看到的,但不能与git clone --mirror
会发生什么,也不知道为什么你可以git checkout iOS
,突然有一个新的refs/heads/iOS
;并且为此我们需要两个以上的项目,大约refspecs(与git fetch
和git push
一起使用)和约what Git calls DWIM, or Do What I Mean, in git checkout
。
为了保持这个简短:a 参考只是一对引用,用冒号分隔,有时用*
替换一部分。例如,refs/heads/*:refs/remotes/origin/*
是一个refspec。你也可以在前面加一个前导加号的前缀refspec;这将设置--force
标志。 git fetch
和git push
与refspecs一起工作(并且都有--force
他们自己的标志,它有效地将+
添加到您在命令行上给出的任何refspecs)。冒号前的参考是源和参考冒号后是目的地,这很重要,因为有2个控释片参与git fetch
和git push
:你的,和其他一些Git的。
当你git fetch
,源引用其他Git的引用和目标的人是你。当你git push
,来源参考是你的,而目的地是他们的。
使用git clone --mirror
告诉你的Git建立一个裸库(我将离开这里未定义),并设立+refs/*:refs/*
为的Refspec为git fetch
。这复制所有参考从其他Git在origin
,但它意味着你不能拥有自己的分支机构:你的Git现在是他们的一个确切的副本,并且每次运行git fetch
时,您的取代您所拥有的一切。他们的确切副本,再次。
大多数git clone
操作的要点是得到一个不精确“他们的Git”的副本。这里的基本想法是,你希望所有的他们分支名称成为您远程跟踪分支名称。他们的master
成为您的origin/master
;他们的iOS
成为您的origin/iOS
。
这没有留下余地他们origin/*
,因为你的不精确的副本具有自己的origin/*
。如果你想获得他们的远程追踪分支,你可以 - 但你需要给他们一些其他的名字!
一旦你有你的(无反光镜)克隆,和他们whatever
成为你origin/whatever
,可以git checkout whatever
和DWIM动作我提到(和链接)以上进场时,创建新的本地whatever
使用自己的origin/whatever
哪位你从他们的whatever
复制!
镜像克隆是克隆裸露,你不能在它检查的分支。 –
您有一个服务器存储库。你在该回购中运行'git branch -r'。运行'git branch -r'不会列出该回购中的分支。它列出了远程分支。 IE浏览器。 '''''''iOS'和'neatUI'都是您的服务器存储库克隆的其他仓库中的所有分支。要列出服务器仓库中的分支,你应该运行'git branch'而不用'-r'标志。 – Alderath
git分支只显示“开发”。看起来你在正确的轨道上! :) 如何添加其他分支? –