用--depth 1克隆后用git拉取更新

33qvvth1  于 2022-11-20  发布在  Git
关注(0)|答案(4)|浏览(438)

今天 早上 我 做 了 一 个 Linux 源 代码 的 浅层 克隆

git clone --depth 1 https://github.com/torvalds/linux.git

中 的 每 一 个
这 将 产生 一 个 大小 为 851Mb 的 linux 文件 夹 。
现在 我 想 调出 最 新 的 更改 , 但是

git pull

格式
开始 一 个 看似 巨大 的 下载 。 在 60Mb 之后 , 我 在 3% , 这 推断 为 2Gb 。 然而 , 5 提交 , 因为 我 的 克隆 只 改变 了 一 堆 行 。
我 做 错 了 什么 吗 ? git 尝试 下载 的 2GB 是 什么 ?

4xy9mtcn

4xy9mtcn1#

我认为你也可以在git pull中使用--depth 1,这样它就可以得到仓库中最新提交所需要的东西。
我不知道默认行为是否是提取所有缺失的内容,因为我的git help pull显示了以下选项:

git pull --unshallow

git fetch  --unshallow

--unshallow将一个浅层仓库转换为一个完整的仓库,移除浅层仓库所施加的所有限制。
我正在运行git version 1.8.5.2 (Apple Git-48),这可能是某种新的行为,在不同版本之间有一些变化。

wvyml7n5

wvyml7n52#

有没有可能是合并提交,指向的提交不在树中?也许--depth 1000会更好地工作,并且仍然足够小。

nfs0ujit

nfs0ujit3#

Depth将提交放置在.git/shallow文件中。当检索提交历史记录时,您的请求将在浅文件中的提交处停止,但如果有合并到当前分支中,它将跟随该分支以及其后的整个历史记录。
从我的博客文章Exploring Git Clone --depth
如果你有一个分支结构,当main在c时,你做了一个git clone --depth=1

...  -  .  -  .  - [c] -  .  -  .  -  .  -  .  (main)
         \               /
           .  -  .  -  .  (xyz)

然后在g处进行提取,d处的合并将导致您拉取几乎整个历史(b除外)。

1000’s of commits  -  a  -  .  - [c] -  d  -  e  -  f  -  g  (main)
                       \               /
                         x  -  y  -  z  (xyz)

我的博客文章对此给出了两条建议:
1.以指定的深度提取并更新分支:

git fetch --depth 1 origin main
git reset --hard origin/main

1.克隆足够的历史记录,您可能不会获得旁路:

git clone --shallow-since=2022-06-01 repo
ijxebb2r

ijxebb2r4#

Just use

git pull --depth=50

or specify the depth you would like to download. That should be fine.

相关问题