如何将Git浅表克隆转换为完整克隆?


Answers:


92

编辑: git fetch --unshallow现在是一个选项(感谢杰克·奥康纳)。

您可以运行git fetch --depth=1000000(假设存储库中的提交少于一百万次)。


237
现在已经git fetch --unshallow存在(如@sdram的答案),此答案不再是最佳答案。
Jack O'Connor 2014年

1
@sdram的答案对我不起作用(git版本2.1.1),但此答案有效。
凯-SE是邪恶的

2
没有一个答案对我有用。这两个命令都成功提取了所有丢失的提交,但是当我尝试推送新的提交时,我收到有关服务器的消息,该消息不知道“浅”引用
Tyguy7 2015年

3
git fetch --depth=2147483647是可提供给命令的最大深度。
clacke

5
我使用git fetch --unshallow,但是它仍然不显示所有分支。
Sid

674

下面的命令(git版本1.8.3)将浅表克隆转换为常规克隆

git fetch --unshallow

然后,可以访问原始站点上的所有分支(在评论中感谢@Peter)

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

36
这不会消除-单分支的副作用。为此,请编辑.git / config并将fetch = + refs / heads / BRANCHNAME:refs / remotes / origin / BRANCHNAME更改为fetch = + refs / heads / *:refs / remotes / origin / *
Peter Cordes

3
这不会创建跟踪远程分支的本地分支,因此您仍然需要检出-b BRNAME origin / BRNAME来进行设置。
彼得·科德斯

25
另请参见stackoverflow.com/questions/17714159/…git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"; git fetch origin 从答案中可以看到与手工编辑.git / config相同
Peter Cordes 2014年

仅在将回购标记为浅的情况下才有效。我不记得是怎么回事,但是在某些情况下,您可能会得到不完整的回购而无需明确进行浅表克隆。@svick的stackoverflow.com/a/6802238/260122是每次都有效的答案。
clacke

git fetch --unshallow --update-head-ok origin '+refs/heads/*:refs/heads/*'为我工作
gzaripov

19

我只需要加深某个特定提交的仓库即可。

阅读后man git-fetch,我发现不能指定提交,但可以指定日期:

git fetch --shallow-since=15/11/2012

对于那些需要逐步加深的人,请另外man引用:

--deepen=<depth>

与--depth相似,不同之处在于它指定从当前浅边界而不是每个远程分支历史记录的尖端的提交次数。



0

以上消息均无济于事。我正在尝试从浅层克隆开始使用git标签。

首先我尝试

git fetch --update-shallow

哪种方法成功了 但是,没有可用的标签!

git fetch --depth=1000000

最后一条命令确实获取了标签,我终于可以执行了

git checkout -b master-v1.1.0 tags/v1.1.0

并完成它。

高温超导

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.