我遇到了与 - 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
您可以尝试使用相同的推送:
git config --global pack.sparse true(我于 2019 年 3 月pack.sparse在此提出了该选项)该选项来自这些 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,以便每个可到达的对象要么在该组中,要么已知在服务器上。
目标是找到正确的“前沿”
有趣提交的直接父级无趣提交构成了边界
老的:
为了确定哪些树和斑点是有趣的,旧算法首先确定所有不感兴趣的树和斑点。
从边界中的每个无趣提交开始,从其根树递归遍历,并将所有可到达的树和 blob 标记为无趣。此步行会跳过已标记为无趣的树,以避免重新访问图表的潜在大部分。
新的
旧算法是递归的:它采用一棵树并在所有子树上运行算法。
新算法使用路径来减少树行走的范围。它也是递归的,但它需要一组树。
当我们开始算法时,树集包含不感兴趣和感兴趣提交的根树。
新的树行走递归地探索包含有趣和不有趣的树的路径。
在 的树中B,我们有名为F和 的子树G。
两个集合都有有趣和无趣的路径,因此我们递归到每个集合。这一直持续到B/F和B/G。该B/F集合不会递归到B/F/Mor ,B/F/N并且该B/G集合不会递归到B/G/Xbut notB/G/Y。
这听起来像是行结束问题。
如果您在 Windows 计算机上签出存储库,Unix (LF) 行结尾将转换为 Windows (CR LF)。
当你提交时,Git 会认为所有文件都已更新,因为所有行结尾都已更改。
您可以使用以下命令配置 Git 来为您管理:
git config --global core.autocrlf true
| 归档时间: |
|
| 查看次数: |
9209 次 |
| 最近记录: |