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

如何将Git浅克隆转换为完整克隆?,git,clone,Git,Clone,接下来的问题是:如果我有一个浅层克隆,如何获取所有较旧的提交以使其成为完整克隆?编辑:git fetch--unshall现在是一个选项(感谢Jack O'Connor) 您可以运行git fetch--depth=1000000(假设存储库的提交少于一百万次)。下面的命令(git版本1.8.3)将浅层克隆转换为常规克隆 git fetch --unshallow 然后,访问origin上的所有分支(在评论中感谢@Peter) 我只需要将回购深化到特定的承诺 在阅读了mangitfetch之后

接下来的问题是:如果我有一个浅层克隆,如何获取所有较旧的提交以使其成为完整克隆?

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

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

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

git fetch --unshallow
然后,访问origin上的所有分支(在评论中感谢@Peter)


我只需要将回购深化到特定的承诺

在阅读了mangitfetch之后,我发现不能指定提交,但可以指定日期:

git fetch --shallow-since=15/11/2012
对于那些需要逐步深化的人,另一位
man
quote:

——深化=
与--depth类似,只是它指定了 从当前浅边界而不是从尖端提交 每个远程分支的历史记录

您可以尝试以下方法:

git fetch --update-shallow

上述消息都没有奏效。我正在尝试从浅层克隆开始使用git标记

首先我试过

git fetch --update-shallow
哪种方法成功了一半。 然而,没有可用的标签

git fetch --depth=1000000
最后一个命令真的获取了标记,我终于可以执行了

git checkout -b master-v1.1.0 tags/v1.1.0
就这样吧


HTH

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

  • 使用以下步骤下载分支:(这将下载分支的浅层副本,然后将其转换为完整克隆,即获取完整的分支及其历史记录)

    a。git克隆-b分支--深度1

  • 这会使浅层克隆(使用深度选项)只获取一个分支(在您请求的深度)

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

    然后,访问所有分支

    f. git remote set-branches origin '*'
    
    [此步骤也可以通过在.git/config中编辑以下行手动完成

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

    要(将主控形状替换为*):

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

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


  • 如果使用下面的命令而不是步骤a中的命令,则可以避免步骤f和g。要执行浅克隆,请执行以下操作:

    git克隆-b分支--没有单个分支--深度1


  • 现在,git fetch--unshall已经存在(正如@sdram的答案一样),这个答案不再是最好的答案。这两个答案对我都不起作用。这两个命令都成功地获取了所有丢失的提交,但是当我尝试推送新提交时,我得到一个错误,服务器不知道'shall'refs
    git fetch--depth=2147483647
    是为命令提供的最大可能深度。我使用了
    git fetch--unshall
    ,但它仍然没有显示所有的分支。“希德,给我定好了。你考虑标记@ SDRAM的答案吗?”这是正确的。相关:这并不能消除单分支的副作用。为此,编辑.git/config并将fetch=+refs/heads/BRANCHNAME:refs/remotes/origin/BRANCHNAME更改为fetch=+refs/heads/*:refs/remotes/origin/*这不会创建跟踪远程分支的本地分支,因此您仍然需要签出-b BRNAME origin/BRNAME来获得该设置。另请参见:
    git-config remote.origin.fetch“+refs/heads/*:refs/remotes/origin/*";
    git-fetch-origin
    从答案中应该与手工编辑相同。git/config这仅在repo标记为浅时有效。我不记得怎么做了,但在有些情况下,你可以在没有明确做过浅层克隆的情况下完成不完整的回购@svick的答案每次都有效。
    git fetch--unshall--update head ok origin'+refs/heads/*:refs/heads/*'
    对我有效否决票是什么?请解释一下,这样我就可以改进了。非常感谢。
    git checkout -b master-v1.1.0 tags/v1.1.0
    
    b. cd customSP01
    c. git fetch –depth=100
    d. get fetch –depth=500
    ....
    e. git fetch –unshallow    
    
    f. git remote set-branches origin '*'
    
    g. git fetch -v