Git - 推动一个大型项目的远程分支非常慢

时间:2013-03-22 04:10:20

标签: git

我们只是转向我的工作。我们有一个相当大的项目,在版本控制下有一些相当大的资源(~500MB)。

今天我们尝试将分支机构推送到远程服务器,并且很惊讶git似乎试图上传整个项目。我本来希望git只发送4-5个有变化的文本文件的增量(就像普通推送到master一样)。这不是远程分支的工作原理吗?我们使用git push origin some_branch_name,在这种情况下有更好的命令吗?我们不应该在git中存储大量资源吗?如果没有,人们通常如何处理这种情况?有没有更好的方法让一个开发人员与另一个开发人员分享正在进行的工作,而无需将更改提交给主分支?就目前而言,我们正在寻找大约15分钟来推动一个远程分支,这实际上是行不通的。我们做错了什么?

2 个答案:

答案 0 :(得分:1)

你能用一些东西来更新你的帖子吗?

为了更好地了解项目的外观,请发布以下十多个条目:

git log --decorate=short --oneline --graph --all

如果大型资源是二进制文件,那么不应该将它们存储在git中。如果那些二进制资源被更新然后git那么它必须在内部完全复制它们,压缩算法不喜欢它们,并将它们发送到服务器。至于如何处理它们,这取决于场景。你需要详细说明。

听起来你有几个开发人员在同一个遥控器上工作。它是否正确?如果是这样,开发人员不应该直接提交master(永远不会发生这种情况)。每个开发人员都可以拥有自己的命名分支。例如,开发人员John可以在john/<branch_name>下创建所有分支。这有助于保持工作流程的清洁。

此外,git不适用于增量。它每次更改时都会完整地存储文件。这可能看起来效率低下,但使用的压缩使尺寸减小到最小。它可以更快地帮助检查和扫描日志历史记录。阅读Git Basics的第一部分以进行可视化。

答案 1 :(得分:0)

另一个因素可以解释git push的效果不佳:

git push”用于在处理ref的旧值和新值的列表时检查对象名和refname之间的歧义,这是不必要的(因为它知道它正在馈送原始对象名)。

请参见commit a4544b3Derrick Stolee (derrickstolee)(2018年11月6日)。
帮助者:Jeff King (peff)
(由Junio C Hamano -- gitster --commit 1373999中合并,2018年11月19日)

  

pack-objects:忽略不明确的对象警告

     

一个git push进程在其运行过程中会运行多个进程,但其中一个包含git send-pack的进程会调用git pack-objects并使用对象ID将已知的有/无意愿传递到stdin中。

     

但是,core.warnAmbiguousRefs的默认设置需要git pack-objects   检查与ref_rev_parse_rules中的refs.c数组匹配的引用名称。
  这意味着每个对象至少触发六个“文件是否存在?”查询。

     

当裁判很多时,这可能会加起来很明显!
  我观察到一个简单的推送就花了三秒钟来检查这些路径。

此问题已在Git 2.20(2018年第四季度)中得到解决。