对于巨额回购而言,git推进非常缓慢

对于巨额回购而言,git推进非常缓慢,git,github,Git,Github,我的问题与下列问题相同: 但是那里的答案不适合我的情况 我正在与一家公司GitHub合作,该公司有一笔非常大的回购协议。我的过程如下: 1) 从主人那里拉 2) 创建新分支 3) 承诺 4) 推送分支以创建拉取请求 当将分支推到(4)上时,它希望写入超过1000000个对象,这大约需要3gb,而我所做的提交仅更改了1行 如果我转到GitHub UI并从UI中创建一个与(2)中相同名称的分支,然后将其推入该分支,则推送所需时间不到一秒钟。不用说,master和我的分支之间的更改非常小(没有添加或删

我的问题与下列问题相同: 但是那里的答案不适合我的情况

我正在与一家公司GitHub合作,该公司有一笔非常大的回购协议。我的过程如下:

1) 从主人那里拉

2) 创建新分支

3) 承诺

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

当将分支推到(4)上时,它希望写入超过1000000个对象,这大约需要3gb,而我所做的提交仅更改了1行

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

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


Windows 2.17.0版上的Git听起来像是行尾问题

如果您在Windows计算机上签出回购,Unix(LF)行结束符将转换为Windows(CR LF)。

提交时,Git会认为所有文件都已更新,因为所有行尾都已更改

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


git config--global core.autocrlf true

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

  • git config--global pack.sparse true
    (我在2019年3月介绍了
此选项来自,并在中实施,其中包括注释:

这些改进将在未来带来更大的好处- 大型Windows存储库

这对你来说应该很有趣

请参阅“”中的“”

git推送
通常会显示如下内容:

$ 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
“列举”是指:

Git构造了一个包文件,其中包含您试图推送的提交,以及服务器理解该提交所需的所有提交、树和blob(统称为对象)。
它查找一组提交、树和blob,以便每个可访问对象都位于该集中或已知位于服务器上

目标是找到正确的“边界”

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

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

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

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

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

新的树漫游递归地探索包含有趣和无趣树的路径。
B
的树中,我们有名为
F
G
的子树
两个集合都有有趣和无趣的路径,所以我们递归到每个集合中。这将延续到
B/F
B/G
B/F
集合不会递归到
B/F/M
B/F/N
B/G
集合不会递归到
B/G/X
,但不会递归到
B/G/Y


如果运行git show--name status,有多少个文件?在什么时候运行?在步骤3之后,提交。。。它还取决于您的tty输出:对于大型回购,您现在(2019年第1季度)有了Git For Windows 2.21的配置
pack.sparse
,这有助于推送的性能。请参阅“因为所有的行尾都会发生变化”,好吧,只有当你用一些编辑器打开文件时才会覆盖它们,对吗?我觉得,如果你在Windows系统上签出回购协议,Git会转换所有文件的结尾,不管是否打开文件。请尝试
git签出主机
git状态
。您可能还没有对master进行任何更改,因此如果所有文件都列为Git状态中正在修改的文件,则文件结尾可能已更改。@barro32实际上是在幕后进行的,因此文件不会标记为已更改。