问题标签 [git-gc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7233 浏览

git - Git 存储库太大

我有一个项目,其中包含约 12MB 的代码和资产。我一直在使用 Git 跟踪它,只是注意到我的.git文件夹现在刚刚超过 1.83GB。它由几个小文件组成,然后只有一个包文件构成了大约 1.82GB 的文件夹。

我已经跑了git gc --aggressivegit gc --prune。它的大小相同。我试过了:

但它仍然是相同的大小。我什至克隆了它(一次在本地强制重新打包,然后再次从 Git),但每个仍然是 1.83GB。这正常吗?有什么办法可以减少它的大小,还是我只是开始一个新的仓库,复制代码,并接受我过去的提交将会消失?

0 投票
2 回答
5780 浏览

git - git gc 和 git pull 锁定机器并且永远不会完成

运行时git gc,git 最多完成 99%,然后锁定。我让它整夜运行,它从未完成,似乎没有进展。通常我必须硬重置机器才能恢复,因为一切都锁定了。因为机器变得完全没有反应,我无法获得tophtop统计数据。

我决定暂时忽略这个问题。然而,今天,当运行git pullgit 时,决定自动打包存储库,这引发了同样的错误。

这是卡住的地方:

这是 Fedora 17 上的 Qt 4.8 C++ 项目。我有 8GB 的​​ RAM,保存该项目的分区是 33G,使用了 27G(88% 已满)。

什么可能导致这个问题?如果机器缺乏运行资源git gc,有没有办法告诉 git 不要自动打包?

0 投票
1 回答
2253 浏览

git - 为什么当 repo 变大时 git 操作会变慢

我知道当 repo 变大时 git 会变慢。
但为什么?
由于 git 将文件存储为单独的目录和.git下的文件,我无法找出操作变慢的原因。让我们看一下提交操作。最近,我克隆了 webkit repo 并从 master 分支,然后我将一个2k文件提交到分支。但我觉得它比我在我的小回购上做的要慢。
因为我没有通读 git 源代码,我猜提交操作会影响将文件存储到磁盘、插入提交日志、更新索引并将HEAD更新为文件的 sha 值。

写入速度很快。
插入速度很快。(我猜,如果插入操作是将日志附加到文件)
更新索引很快。
更新 HEAD 很快。

为什么它很慢?任何人都可以向我说明吗?
谢谢。

一些答案很有帮助但不是很有说服力,提供一些代码片段来支持你会很棒。

0 投票
2 回答
2231 浏览

git - 试图重定向“git gc”输出

我在所有存储库上@daily运行的 crontab 中有一份工作。git gc我正在尝试为作业设置日志文件,但 I/O 重定向不会产生我正在寻找的结果;我得到一个空白文件。

我已经完成了所有通常的操作>2>&1依此类推,没有任何成功。

有人向我提到git gc将 ncurses 用于其输出过程,该过程将输出直接发送到控制台,从而绕过 stdout/stderr(如果我在这里错了,请纠正我)。

有人能指出我正确的方向吗?

0 投票
0 回答
7977 浏览

git - 无法在 git gc 中运行重新打包

尝试以下命令并面临错误。

C:\project\sys\src>git gc

计数对象:6342699,完成。

警告:次优包 - 内存不足

致命:内存不足,malloc 失败(试图分配 239971384 字节)

错误:无法运行重新打包

我努力了

  1. git config --global pack.windowMemory 256m

  2. git repack -a -f -d

  3. 更新最新的 git 扩展

  4. git gc --aggressive --prune=now

我已经尝试了很多选项。但我仍然面临这个问题。知道为什么我会收到此错误吗?

0 投票
1 回答
424 浏览

git - git:在本地重新打包,推送重新打包的对象

我有什么方法可以在本地机器上进行重新打包工作,然后将生成的打包数据库推送到我的远程存储库?

0 投票
0 回答
287 浏览

git - 每次使用替代品时都重新打包借来的 repo?

我会先提出问题,然后给出解释:

如果我的包文件非常大,比如 100-150Mb,会有什么问题?

我在做什么?

我为我的组织创建了一个分叉模型。所以每个开发人员都从blessed_repo 分叉,在本地机器上克隆他们的分叉,hack-hack-hack,推送到分叉。

现在,每个用户都在将几乎相同的东西推送到他们的分叉中,并且对象在多个用户的分叉中复制。

因此,我决定有一个 Shared_objects_Store ,每个叉子alternate都指向它。
但是这里 Junio C Hamano说我需要git repack -adl每次在借来的仓库中运行,因为如果它们在对象存储git-gc中处于松散状态,则不会从借用仓库中删除重复的对象。alternate

现在,如果我git repack -adl每次都继续跑步,它会创建一个和唯一一个包,它会很大。从长远来看,它会给我带来这样其他的问题吗?

提前致谢!

更新 1

我必须使用替代品,因为磁盘空间是一个问题。同样没有它,备份会变得越来越庞大。(我有 100 个相同 repo 的分支,每次推送相同的内容都会一团糟。)
我的服务器在 CentOS 上,最初的分支创建硬链接,但随后从本地 repo 推送到个人分支会产生冗余对象。

0 投票
1 回答
707 浏览

git - 使用另一个分区进行临时 git 操作 (git gc)

假设我git在有限的磁盘分区(比如拇指驱动器)上有一个 repo。

假设我最后一次推送到那个 repo 失败了,因为当前分区被填满了。

假设我尝试用git gc;回收一些空间 那么git gc也会失败:

现在,在同一台机器上,我有另一个分区,它有足够的空间;我知道我可以在那里克隆这个 repo,并在gc那里运行,然后将 repo 从另一个分区复制回/写入到第一个分区。

但我想知道:相反,有没有办法,我可以指示git对它需要写入的任何临时文件使用“另一个分区”,而我git gc在原始分区上的 repo 中调用 - 结果是在操作完成后,git会删除“另一个分区”上的临时文件;并且它会在“原始分区”回购中修改/删除/添加所有必要的文件(如果可能的话,影响空间回收)?

0 投票
1 回答
1707 浏览

git - Git:Git 什么时候进行垃圾回收?

我想知道:Git 什么时候执行垃圾收集?我知道过去必须调用git gc手动启动垃圾收集,但现在它是自动完成的,什么时候?

另外,是否需要在最新的 Git 版本中手动调用它?

0 投票
1 回答
288 浏览

git - git gc failure 是指未在任何地方引用的对象哈希

最近,我注意到,当我在git pulling 我的 repo 时,它每次都在做git gc一次。所以我尝试git gc手动运行,这给了我这个错误:

然后,我尝试搜索.git/packed-refsand.git/objects/.git/index查找此哈希(甚至尝试仅在整个.git/目录的文件名和内容中搜索此哈希),但它从未出现. 它也没有出现在git fsck --full(我猜这可能是指 中的某些文件.git/,所以这是有道理的)。

我该如何解决?(我正在使用git 2.3.2。)