对于一个巨大的仓库来说 git Push 非常慢

Buz*_*zzy 5 git github

我遇到了与 - git Push 对于分支来说非常慢的问题 ,但那里的答案不适合我的情况。

我正在针对一个拥有非常大的存储库的企业 GitHub 进行工作。我的流程如下:

1)从master拉取

2)创建新分支

3)承诺

4) 推送分支以创建拉取请求。

当将分支推送到 (4) 时,它想要写入超过 1,000,000 个对象,当我所做的提交仅更改 1 行时,这大约需要 3GB。

如果我转到 GitHub UI 并从 UI 创建一个与 (2) 中名称相同的分支,然后推送到该分支,则推送时间不到一秒。不用说,master 和我的分支之间的更改非常小(没有添加或删除大文件)。

我该怎么做才能让 Git 只推送相关数据而不是整个存储库?

Windows 版本 2.17.0 上的 Git

Von*_*onC 5

您可以尝试使用相同的推送:

该选项来自这些 paches,并在提交 d5d2e93中实现,其中包括注释:

这些改进将在超大型 Windows 存储库中带来更大的好处。

对于你的情况来说这应该很有趣。

请参阅Derrick Stolee的“探索 Git 推送性能的新领域

Agit push通常会显示类似以下内容:

$ git push origin topic
Enumerating objects: 3670, done.
Counting objects: 100% (2369/2369), done.
Delta compression using up to 8 threads
Compressing objects: 100% (546/546), done.
Writing objects: 100% (1378/1378), 468.06 KiB | 7.67 MiB/s, done.
Total 1378 (delta 1109), reused 1096 (delta 832)
remote: Resolving deltas: 100% (1109/1109), completed with 312 local objects.
To https://server.info/fake.git
* [new branch] topic -> topic
Run Code Online (Sandbox Code Playgroud)

“列举”的意思是:

Git 构建一个包文件,其中包含您尝试推送的提交,以及服务器需要理解该提交的所有提交、树和 blob(统称为对象)。
它找到一组提交、树和 blob,以便每个可到达的对象要么在该组中,要么已知在服务器上。

目标是找到正确的“前沿”

https://devblogs.microsoft.com/devops/wp-content/uploads/sites/6/2019/05/sparse-push-commit-walk.png

有趣提交的直接父级无趣提交构成了边界

老的:

为了确定哪些树和斑点是有趣的,旧算法首先确定所有不感兴趣的树和斑点。

从边界中的每个无趣提交开始,从其根树递归遍历,并将所有可到达的树和 blob 标记为无趣。此步行会跳过已标记为无趣的树,以避免重新访问图表的潜在大部分。

https://devblogs.microsoft.com/devops/wp-content/uploads/sites/6/2019/05/sparse-push-old-algorithm.png

新的

旧算法是递归的:它采用一棵树并在所有子树上运行算法。

新算法使用路径来减少树行走的范围。它也是递归的,但它需要一组树。
当我们开始算法时,树集包含不感兴趣和感兴趣提交的根树。

https://devblogs.microsoft.com/devops/wp-content/uploads/sites/6/2019/05/sparse-push-new-algorithm.png

新的树行走递归地探索包含有趣和不有趣的树的路径。
在 的树中B,我们有名为F和 的子树G
两个集合都有有趣和无趣的路径,因此我们递归到每个集合。这一直持续到B/FB/G。该B/F集合不会递归到B/F/Mor ,B/F/N并且该B/G集合不会递归到B/G/Xbut not B/G/Y


bar*_*o32 0

这听起来像是行结束问题。

如果您在 Windows 计算机上签出存储库,Unix (LF) 行结尾将转换为 Windows (CR LF)。
当你提交时,Git 会认为所有文件都已更新,因为所有行结尾都已更改。

您可以使用以下命令配置 Git 来为您管理:

git config --global core.autocrlf true