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

so-question的后续:如果我有一个浅克隆,如何获取所有旧的提交使它成为一个完整的克隆?

118339 次浏览

编辑: git fetch --unshallow现在是一个选项(感谢Jack O'Connor)。

你可以运行git fetch --depth=2147483647

浅层文档:

特殊深度2147483647(或0x7fffffff, 32位有符号整数可以包含的最大正数)表示无限深度。

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

git fetch --unshallow

然后,访问所有分支的起源(感谢@Peter在评论中)

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

我只需要将一个回购深化到一个特定的提交。

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

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

对于那些需要增量深化的人,另一个man引用:

--deepen=<depth>

类似于——depth,只不过它指定了 从当前浅边界提交,而不是从尖端提交

你可以试试这个:

git fetch --update-shallow

以上这些信息都没有起到作用。我试图从一个浅克隆开始与git标签工作。

首先我尝试了

git fetch --update-shallow

这种方法在中途有效。 然而,没有标签可用!< / p >

git fetch --depth=1000000

最后一个命令真的获取了标签,我终于可以执行了

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

然后就完事了。

HTH

实现浅克隆到深克隆的两种方法。:

  1. 使用以下步骤下载分支:(下载分支的浅拷贝,然后将其转换为完整克隆,即带来完整的分支和它的历史)。

    a. git克隆-b分支http://git.repository/customSP01.git——深度1

这是一个浅克隆(使用depth-选项),只获取一个分支(在您所请求的深度)。

b. cd customSP01
c. git fetch -depth=100
d. get fetch -depth=500
....
e. git fetch --unshallow

//上述命令将浅克隆转换为常规克隆。 然而,这并没有带来所有的分支:

然后,访问所有的分支。

f. git remote set-branches origin '*'

[此步骤也可以通过编辑.git/config中的以下行手动完成。

Fetch = +refs/heads/master:refs/remotes/origin/master

To(用*替换master):

fetch = +refs/heads/*:refs/remotes/origin/* ) < / p >

g. git fetch -v

这将浅克隆转换为深克隆与所有的历史和分支细节。


  1. 你可以避免f和g步骤,如果你使用下面的命令代替步骤a中的命令来做浅克隆:

    http://git.repository/customSP01.git——深度为1