美文网首页 iOS进阶之Git
Git远程文件较大,如何顺利拉取代码?

Git远程文件较大,如何顺利拉取代码?

作者: 天蓬大元 | 来源:发表于2019-06-25 10:06 被阅读12次

    原理

    读过《Pro Git》这本书的同学,应该对Git文件存储方式有一定的了解。如果一个项目存在时间较久,期间不可避免的要创建很多的分支并且有相当可观的代码提交历史。
    此时,如果直接clone下来整个仓库。将包含所有的提交记录。其体积是相当可观的。至于为什么超过1G就难以clone。我暂时也不清楚原理。有知道的同学欢迎留言。
    那解决方式就是先下载一部分,然后根据需要看是否要将其他部分也下载放在本地。
    代码如下:
    git clone --depth 1 https://github.com/dogescript/xxxxxxx.git
    
    depth:深度。顾名思义,就是分支的提交记录。后面是1,就是只下载最近一次提交代码的分支的最近一条记录。用log查看只能看到一条提交记录。
    隐藏的一层意思是:最近一次有提交记录的分支。只会下载这一个分支的代码,并且只同步最近一次的提交。这样,整个下载的文件就小了很多。根据经验,绝不会超过1G。否则,说明你的代码库文件太多了。
    好。现在代码拉下来了。
    但这个分支不一定是你需要的分支,怎么办呢?
    此时你需要切换到你需要的分支上去。
    代码如下:
    $ git remote set-branches origin 'remote_branch_name'
    $ git fetch --depth 1 origin remote_branch_name
    $ git checkout remote_branch_name
    
    remote_branch_name:远程分支的名字。
    这样,你就可以任意从远端拉去分支代码了。

    但:分支的log,无论是之前的分支,还是新拉取的分支,都只有一条提交记录。那么你想查看多条要怎么办呢?

    git fetch --unshallow
    
    如果源存储库已完成,请将浅存储库转换为完整存储库,从而消除浅存储库所施加的所有限制。
    如果源存储库很浅,则尽可能多地获取,以便当前存储库与源存储库具有相同的历史记录。
    然而,这个会去拉取所有的记录。可想而知,如果所有的记录可以同步下来,我们也就不用这样折腾了。所以,此时用这个命令解决不了问题。
    当然,如果情况是你先获取了远端库的一部分,想全部同步过来,且整个库体积不大。这个方法可以用来同步所有的记录。
    git fetch --depth=100
    
    从远端抓取100条提交记录。如果不够,可以适当调整条数,但注意,不可过大。避免又发生体积过大而操作不成功的问题。
    讲明白了,这里抓取的是当前分支的100条记录。。
    其实一旦项目有几年的历史,其实你几乎不会再需要项目前期的那些记录。那些远古记录要不要拉取到本地其实没影响。所以,这种方式,并没有什么副作用的。放心用。。

    相关文章

      网友评论

        本文标题:Git远程文件较大,如何顺利拉取代码?

        本文链接:https://www.haomeiwen.com/subject/dovzqctx.html