原理
读过《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条记录。。
其实一旦项目有几年的历史,其实你几乎不会再需要项目前期的那些记录。那些远古记录要不要拉取到本地其实没影响。所以,这种方式,并没有什么副作用的。放心用。。
网友评论