使用 --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 pathsgit pullgit 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 拉取更新的主要内容,如果未能解决你的问题,请参考以下文章

Git克隆:克隆后增加深度[重复]

如何在 Jenkins 中通过 *** 拉取/克隆 git 存储库?

Git 命令行操作介绍

GIT 拉取或克隆存储库仅获取 Master 分支

浅克隆后推送到 github

Git使用汇总