使用 --depth 1 克隆后使用 git 拉取更新
Posted
技术标签:
【中文标题】使用 --depth 1 克隆后使用 git 拉取更新【英文标题】:Pull updates with git after cloned with --depth 1 【发布时间】:2014-06-02 02:47:48 【问题描述】:今天早上我对 Linux 源代码做了一个浅克隆
git clone --depth 1 https://github.com/torvalds/linux.git
这导致了一个 851Mb 的 linux
文件夹。
现在我想提取最新的更改,但是
git pull
开始一个看似巨大的下载。在 60Mb 之后,我在 3% 时推断为 2Gb。但是,自我的克隆以来的 5 次提交只更改了几行。
我做错了吗? git
尝试下载的 2Gb 是多少?
【问题讨论】:
奇怪...我执行了相同的命令,verified the size 我下载的内容大约为 135MB。我也做了同样的拉动,没有下载任何新内容。你使用的是哪个版本的 Git?我在 1.9.1 上,无法重现您的错误。 @Makoto 我关于下载大小的句子误导/错误。我现在已经编辑过了。在我的情况下,实际下载量可能也是 135Mb。我也在使用 git 版本 1.9.1。 @Makoto 如果我克隆最新版本,然后拉取,我也只会得到Already up-to-date
。所以我想只有在克隆后对远程存储库进行了更改时才会出现问题。
【参考方案1】:
我认为您也可以在git pull
中使用--depth 1
,这样它就可以获取存储库中最新提交所需的内容。
我不知道默认行为是否是拉出所有丢失的东西,因为我的git help pull
显示了这个选项:
git pull --unshallow
或
git fetch --unshallow
--不浅的 将浅层存储库转换为完整的存储库,消除浅层存储库施加的所有限制。
我正在运行git version 1.8.5.2 (Apple Git-48)
,也许这是某种新行为,并且在版本之间会有所改变。
【讨论】:
我现在尝试过git pull --depth 1
。 (在我检查git status
之前,一切都显示干净。)然后拉试图合并一些东西,但在某个时候失败了。现在git status
显示Unmerged paths
。 git pull
和 git checkout
不再工作。
git pull
/ git fetch
有--unshallow
选项
这总是让我着迷。我做了git clone repo.git --depth=1
,然后我忘了它,我git log
,我很惊讶提交太少了。最后我记得我以前使用过depth
选项。 git pull --unshallow
一直在救我的命。谢谢!
如果我在 linux 内核存储库上尝试pull --depth 1
,我最终会得到“致命:拒绝合并不相关的历史”,并且 unshallow 需要很长时间才能发挥作用。我最终只是删除了整个内容并再次克隆它,因为它更快。【参考方案2】:
是否有任何新提交是指向树中不存在的提交的合并提交?或许--depth 1000
会更好,而且足够小。
【讨论】:
大部分似乎是合并提交。如果一些深度有帮助,我会尝试。 我不完全理解--depth
的工作原理。直觉上我会假设 --depth 1000
包括最后 1000 次提交。但我尝试了 --depth 100
并最终得到 > 50000 次提交,可以追溯到 2012 年。
终于有一个新的提交(Tack Linus!),所以我可以测试它。它可以工作:使用--depth 100
git pull
克隆后工作正常(clone
为 950Mb,pull
之后相同),而--depth 1
导致pull
之后的存储库大小显着增大
这绝对解释了为什么 linux 内核 repo 无法以深度 1 拉取。Linus 不断从其他树中合并。我不完全明白为什么在这种情况下更深入会有所帮助,但我想它可能会。【参考方案3】:
随便用
git pull --depth=50
或指定您要下载的深度。应该没问题。
【讨论】:
以上是关于使用 --depth 1 克隆后使用 git 拉取更新的主要内容,如果未能解决你的问题,请参考以下文章