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

时间:2011-07-23 17:39:29

标签: git clone

this如此问题的跟进:如果我有一个浅层克隆,如何获取所有旧提交以使其成为完整克隆?

6 个答案:

答案 0 :(得分:571)

以下命令(git版本1.8.3)会将浅层克隆转换为常规克隆

git fetch --unshallow

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

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

答案 1 :(得分:53)

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

答案 2 :(得分:14)

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

在阅读man git-fetch之后,我发现一个人无法指定提交,但可以指定日期:

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

对于那些需要渐进式深化的人,另一个man引用:

--deepen=<depth>
     

与--depth类似,但它指定了数量   从当前的浅边界而不是从尖端提交   每个远程分支历史记录。

答案 3 :(得分:1)

两种方法可以实现从浅克隆到深克隆。 :

  1. 使用以下步骤下载分支:(这将下载分支的浅表副本,然后将其转换为完整克隆,即带来完整的分支及其历史记录。)

    a。 git clone -b分支http://git.repository/customSP01.git-深度1

这会进行一个浅克隆(使用depth-option),仅提取一个分支(以您请求的深度)。

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

到(用*替换主文件):

fetch = + refs / heads / *:refs / remotes / origin / * ]

g. git fetch -v

这会将具有所有“历史记录”和“分支”详细信息的“浅克隆”转换为“深克隆”。


  1. 如果使用以下内容代替步骤a中的命令,则可以避免执行步骤f和g。进行浅层克隆:

    git clone -b分支--no-single-branch http://git.repository/customSP01.git --depth1

答案 4 :(得分:0)

你可以试试这个:

git fetch --update-shallow

答案 5 :(得分:0)

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

首先我尝试

git fetch --update-shallow

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

git fetch --depth=1000000

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

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

并完成它。

HTH