标签: git-gc

运行 git fetch origin 时 Git gc 和 git prune 警告

在某个时刻使用远程存储库时,我在运行时开始收到此消息git fetch origin

在后台自动打包存储库以获得最佳性能。

请参阅“git help gc”以了解手动内务管理。

警告:上次 gc 运行报告以下内容。请更正根本原因并删除 .git/gc.log。

在删除文件之前,不会执行自动清理。

警告:有太多无法触及的松散物体;运行“git prune”来删除它们。

这事儿常常发生。我找到了应该有帮助的地方git gc,但它只工作一次(或似乎工作) - 在此之后和之后git fetch origin我得到

在后台自动打包存储库以获得最佳性能。请参阅“git help gc”以了解手动内务管理。

后来情况又重复了。我还尝试删除 .git/gc.log - 它没有帮助。

我的 git 技能确实有限。为什么我会收到此警告以及如何长期解决该问题?

git git-fetch git-gc

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

什么时候git修剪对象:为什么"git gc"没有删除提交?

我正在开发一个git课程,并且想提一下,在跑步之前,丢失的裁判并没有真正丢失git gc.但验证这一点,我发现事实并非如此.即使在运行git gc --prune=all --aggressive丢失的裁判后仍然存在.

显然我误解了一些东西.在说出不正确的课程之前,我想直截了当地说明事实!这是一个示例脚本说明了效果:

 #!/bin/bash

 git init

 # add 10 dummy commits
 for i in {1..10}; do
     date > foo.txt
     git add foo.txt
     git commit -m "bump" foo.txt
     sleep 1
 done;

 CURRENT=$(git rev-parse HEAD)
 echo HEAD before reset: ${CURRENT}

 # rewind
 git reset --hard HEAD~5

 # add another 10 commits
 for i in {1..10}; do
     date > foo.txt
     git add foo.txt
     git commit -m "bump" foo.txt
     sleep 1
 done;
Run Code Online (Sandbox Code Playgroud)

这个脚本将添加10个虚拟提交,重置为过去的5个提交,并添加另外10个提交.在重置之前,它将打印它当前HEAD的哈希值.

我希望CURRENT在跑步后失去对象 …

git git-gc

12
推荐指数
1
解决办法
2777
查看次数

Forcing Remote Repo to Compress (GC) with Git

I'm using Git to version a series of binary files. They compress pretty well, but my central repos do not seem to be compressing when I push to them. They're eating up a decent amount of my quota, so I was looking to see if there was a way to force the remote repo to do a GC.

Is this possible? I'm working on Project Locker so I don't believe I have SSH access to go in and GC the …

git git-remote git-gc

10
推荐指数
1
解决办法
9865
查看次数

自定义对象和参考的注意事项是什么?

假设我想编写一个小助手,它允许将一些元数据附加到存储库中,这种方式可以通过refs. 简单示例(一个克隆原型,甚至不将注释附加到任何其他 git 对象):

hash=$(echo "Just a comment" | git hash-object -w --stdin)
git update-ref refs/comments/just $hash
Run Code Online (Sandbox Code Playgroud)

即我blob用哈希创建一个hash并引用它,因为refs/comments/just这样git fsck --unreachable不会抱怨它,git gc也永远不会prune是对象。

但这当然是一个非常简单的例子,实际上我对更复杂的功能感兴趣。在那里,我的问题是,我可以“合法”做什么,我绝对应该避免什么?

例如,SE 上的一些帖子是关于用户必须从重复tree条目中恢复的。因此,“不要”就是“不要创建tree具有重复条目的条目”。另一个例子是“你确保你的对象是可到达的,所以git prune不会删除它们。” 还有什么?

我可以创建自定义对象类型吗?对树中的 blob 使用“无效”文件模式?在哪里可以找到概览?或者我应该git-fsck手动检查's source 以查看什么构成错误(哪些是可以忽略的)?

git git-gc git-fsck git-refspec git-hash

9
推荐指数
1
解决办法
474
查看次数

Git:自动清理?

在过去,人们git gc不时要求援引.我现在读到,最新的Git版本应该自动执行清理.它是否正确?

git garbage-collection git-gc

7
推荐指数
2
解决办法
2944
查看次数

试图重定向'git gc'输出

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

我已经做了所有常规的事情>,2>&1等等没有任何成功.

有人提到我git gc使用ncurses的输出程序将输出直接抛出到控制台,从而绕过stdout/stderr(如果我错了,请纠正我).

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

git bash io-redirection git-gc

7
推荐指数
2
解决办法
2004
查看次数

“悬空”和“松散”的物体是一样的吗?

Git 的文档谈论“悬空”对象,而文档fsck只谈论“gc松散的对象”。有严格的划分。

但是,在浏览一些相关的 SO 帖子时,这些术语似乎可以互换使用。在Git Book v2和 Git 的源代码中也是如此:

   (main) $ git checkout v2.33.0
(225bc32) $ rg 'dangling (object|commit|blob|tag|tree)' | wc -l
      31
(225bc32) $ rg 'loose (object|commit|blob|tag|tree)' | wc -l
     117
Run Code Online (Sandbox Code Playgroud)

最后,这两个命令经常按顺序使用,从它们的行为中我可以清楚地看出它们的目标是相同的。

因此,“悬空”和“松散”只是同一概念的两个相似术语。这个总结正确吗?


或者“松散的物体”是一个类别,而“悬空”是故意为特定类型的物体保留的?

git git-gc git-fsck git-plumbing

7
推荐指数
1
解决办法
365
查看次数

在配额的机器上git gc

简单的问题,我试图git gc在配额的机器上运行.Pre-gc,我的使用率约为18GB,几乎所有这些都是我克隆的git存储库.我的磁盘限制为25GB.在git gc操作期间,足够的临时文件被写入磁盘以达到我的极限,从而导致git gc操作失败.

我可以.git/objects/pack/tmp_pack_*在失败的操作后删除它并恢复到18GB的使用率,但我真的想完成git gc并回收一点性能.

是否有一些花哨的选项(或一系列其他git命令),我可以使用,不涉及首先写入> 7GB的临时文件到磁盘?

git quota git-gc

6
推荐指数
1
解决办法
1569
查看次数

Git:Git什么时候进行垃圾收集?

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

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

git version-control garbage-collection git-gc

6
推荐指数
1
解决办法
933
查看次数

当我们这样做时git会做什么:git gc - git prune

启动后在后台发生了什么,

  • git gc
  • git prune

输出git gc:

Counting objects: 945490, done. 
Delta compression using up to 4 threads.   
Compressing objects: 100% (334718/334718), done. 
Writing objects: 100%   (945490/945490), done. 
Total 945490 (delta 483105), reused 944529 (delta 482309) 
Checking connectivity: 948048, done.
Run Code Online (Sandbox Code Playgroud)

git prune的输出:

Checking connectivity: 945490, done.
Run Code Online (Sandbox Code Playgroud)

这两个选项有什么区别?

谢谢

git garbage-collection git-gc

6
推荐指数
1
解决办法
1986
查看次数