相关疑难解决方法(0)

有没有办法限制"git gc"使用的内存量?

我正在共享主机上托管一个git repo.我的repo必然有几个非常大的文件,每次我尝试在repo上运行"git gc"时,我的进程被共享主机提供程序杀死,因为使用了太多内存.有没有办法限制git gc可以消耗的内存量?我希望它可以交换内存使用速度,只需要花一点时间来完成它的工作.

memory git dreamhost git-gc

32
推荐指数
5
解决办法
2万
查看次数

git push对于分支来说非常慢

我们有一个相当大的git仓库(ios app资源).我很欣赏git在使用它时会很慢,但如果我创建一个新分支并编辑几个文件(不是二进制文件)并推送,则需要永远.

感觉整个回购都被推了.我的印象是git只会发送差异,是不是错了?(我知道git存储整个文件的压缩版本,我的意思是我的分支和我从哪里分支的差异).

如果我运行,git diff --stat --cached origin/foo那么我会看到一个简短的文件列表,看起来像我期望的那样,例如34 files changed, 1117 insertions(+), 72 deletions(-).但当我推动它进入Writing objects: 21% (2317/10804)并停止时,好像它正在推动所有2.4GB的二进制数据.

我错过了什么(我用Google搜索了很多)?这是预期的行为吗?我在OS X(Mavericks)和ssh(git@github.com)上使用git 2.2.2.

我在这里发现了一个类似的问题:Git - 推动一个大项目的远程分支是非常缓慢但没有真正的答案.

git

15
推荐指数
1
解决办法
2万
查看次数

当git repos变大时,什么操作会变慢,为什么?

在SO和其他地方以各种形式提出了这个问题,但是我找不到能使我满意的答案,因为没有人列出有问题/没有问题的动作/命令,也没有对速度下降的技术原因进行透彻的解释。 。

例如:

因此,我不得不再次问:

  1. 基本的git操作(commit,push,pull,add,fetch,branch,merge,checkout)中,当存储库变大时,这些操作会变慢(注意:存储库,不是此问题的文件)

和,

  1. 为什么每个动作都取决于回购规模(或不取决于回购规模)?

我现在不在乎如何解决这个问题。我只关心哪个动作的性能受到影响,以及根据当前git架构的推理。


编辑以澄清:

很明显,git clone例如,将是回购规模的o(n)。

但是我不清楚这是git pull一样的,因为从理论上讲只看差异是可能的。

Git在幕后做了一些非常琐碎的事情,我不确定何时何地。


编辑2:

我发现这篇文章,说

如果您的存储库中有大型不可分散的文件(例如二进制文件),则每次对文件进行更改时,都将在该存储库中保留该文件的完整副本。如果您的存储库中存在这些文件的许多版本,则它们将大大增加签出,分支, 获取和克隆代码的时间。

我不明白为什么分支需要花费超过O(1)的时间,而且我也不确定列表是否已满。(例如,拉动怎么样?)

git

8
推荐指数
2
解决办法
264
查看次数

标签 统计

git ×3

dreamhost ×1

git-gc ×1

memory ×1