如果我们使用git clone --branch
命令,我们只复制指定的分支。使用的额外--single-branch
参数是多少?我不清楚文档。
TIA
答案 0 :(得分:5)
--branch foo
会自动检出foo
,但克隆会下载所有分支/标记及其可访问数据。
--branch foo --single-branch
告诉git-clone只下载foo
可以访问的数据并查看foo
。
答案 1 :(得分:4)
如果我们使用
git clone --branch
命令,我们只复制指定的分支。
不,您正在克隆整个存储库并检查该分支。
答案 2 :(得分:0)
作为ElpieKay answered,git clone --branch name url
(我的意译)非常等同于:
(git clone url && cd clone-target-directory && git checkout name)
-i.e。,它完成了一个完整的克隆。 (上面的括号是因为你的主命令解释器没有改变目录,所以为了模拟这个,我们需要在子shell中做cd
。)
git clone
命令本身是一系列更原始的Git操作的简写。所有这些都在一个新目录 1 中完成,我将在此处显示为步骤1,但请注意,您的命令解释程序本身仍在此新目录之外,因此您最终必须单独执行cd
进入新目录。某些选项不兼容或设置其他选项,例如,默认情况下使用--depth
集--single-branch
。 2 这些选项内置于单个命令中,而不是实际具有{{1调用每个单独的Git命令,但假设整个克隆成功,效果与手动运行每个命令的效果相同。 3
git clone
。目标目录是您指定的目录,或者是根据您为mkdir target && cd target
提供的URL计算的目录。再次见脚注1。
git clone
,用于创建新的空存储库。
如果您使用git init
或--bare
标记,--mirror
会将存储库配置为裸克隆或镜像克隆,就像运行git clone
一样。< / p>
git init --bare
,以便名称git remote add origin url
标识您提供给origin
的 url
参数。
您也可以在此处git clone
进行其他配置;请参阅git clone
/ -c
选项。
如果您使用--config
或-o
标记,则可以将名称从--origin
更改为您喜欢的任何其他名称。其余的假设你没有。
如果您使用origin
标记--single-branch
。这将覆盖git config remote.origin.fetch +refs/heads/branch:refs/remotes/origin/branch
创建的默认值。默认设置告诉Git:带来每个分支。这个特殊设置告诉Git:只带来一个命名分支。这里也见脚注2。
在任何一种情况下,在引入每个分支提示提交(以及从这些提示可以访问的所有提交)之后,您的Git 重命名从其他Git获取的分支,以便代替实际的分支名称,这些成为远程跟踪名称:git remote add
。
如果您在refs/remotes/origin/whatever
期间使用--mirror
选项,Git会覆盖所有这些选项并将fetch refspec设置为git clone
。 (我不清楚+refs/*:refs/*
应该如何与--mirror
互动。)
--single-branch
:此步骤实际上与 git fetch origin
中的其他Git联系,并从中获取引用列表(分支和标记名称,等等)获取提交提交的列表。提交的提交取决于步骤4中设置的url
设置(如果有)或步骤3中的默认设置。
最后,只要这不是裸克隆(remote.origin.fetch
和--bare
),--mirror
。 git checkout branch
步骤的参数从此列表中的最佳匹配中选择: 4
git checkout
/ -b
--branch
此master
命令实际创建您的本地分支,使用复制的远程跟踪名称标识的相同提交。例如,如果您说要结帐git checkout
,则您的-b xyz
会将其git fetch
带回来,并将其重命名为refs/heads/xyz
。然后,此refs/remotes/origin/xyz
会创建您自己的git checkout
,指向与您的refs/heads/xyz
相同的提交,这当然指向他们的 Git的提交(或已拥有) )作为他们的refs/remotes/origin/xyz
。
(如果您使用refs/heads/xyz
选项命名标记,则Git会在您自己的存储库中创建 no 分支。)
因此,虽然-b
和-b
都允许您选择自己的分支名称,但它们在--single-branch
的步骤序列中具有不同的早期效果运行。
1 当您运行git clone
告诉git clone url directory
将克隆放入给定但现有目录时,会出现此规则的例外情况,例如,git clone
。为了让Git允许这个,给定的目录必须为空。
2 如果您使用.
(即使它只是暗示),Git将克隆您使用git clone --single-branch
/ {{1}指定的特定分支}。如果您没有选择使用此选项,Git将使用步骤6中显示的方法为您选择一个。
3 如果-b
操作失败,Git将自行清理,删除整个新目录或在空目录中创建的所有内容。< / p>
4 为了选择正确的分支,你的Git必须向另一个Git询问它的--branch
是什么。在1.8.5之前的Git版本中,没有办法找到答案。如果参与克隆过程的Git早于1.8.5,那么您的Git将拥有其他Git列表的所有分支名称及其哈希ID,然后列出与其git clone
和一起使用的哈希ID猜测可能是哪个分支。如果两个Gits都至少为1.8.5,那么你的Git只会让他们的Git向你发送他们推荐的分支名称 - 当两个Gits都支持&#34;读取符号HEAD&#34;时,不需要猜测。能力。