代码之家  ›  专栏  ›  技术社区  ›  Kasper van den Berg

物体松动的原因是什么?“git prune”能安全地删除它们吗?

  •  0
  • Kasper van den Berg  · 技术社区  · 7 年前

    我使用的是本地Git回购协议,它使用我们公司的SVN回购协议作为来源。

    错误:上次gc运行报告了以下内容。请更正根本原因并删除.git/gc.log日志. 在删除文件之前,不会执行自动清理。

    警告:无法访问的松散对象太多;请运行“git prune”删除它们。

    确实是移除 .git/gc.loc git prune 解决了这个问题。
    然而,在对 VonC answer How to skip "Loose Object" popup when running 'git gui' 通过 Michael Donohue , 国家:

    在一个 answer (也由 VonC公司 )至 Whole team gets 'too many unreachable loose objects' messages 关于…的问题 通过从SVN移动到git后出现松散对象问题 jlengrand , VonC公司 写入:

    • 跑了吉特普朗,祈祷它没有打破东西(谢天谢地,它没有)

    所以,我想 吉特梅干 是一个危险的行动,可以摧毁东西。

    是什么导致这些松散的物体(参见 man git-fsck 关于无法访问的对象并查看 torek answer 关于git对象和散列以及 git gc , ,和 git repack What does git do when we do : git gc - git prune 通过 Lyes CHIOUKH
    只是 git svn push

    1. 读取git提交对象,
    2. 发送到SVN服务器,
    3. 检索存储的SVN修订,
    4. 创建一个新的git commit对象来反映SVN修订版,
    5. 将指向步骤1的提交的头指针替换为指向步骤4的提交的头指针,然后
    6. 将原始提交作为松散对象保留。

    这真的会导致不必要的承诺吗?
    这是否会导致所有松散的提交(我还对SVN中还没有的东西做了一些git树操作,比如 git stash , git cherry-pick , git rebase ,和 git reset )?

    我什么时候需要这些松散的东西? 什么是好的使用策略 吉特梅干 关于我个人的git回购?

    1 回复  |  直到 7 年前
        1
  •  2
  •   torek    7 年前

    以吉特计算, 全部的 新对象开始时是“松散”对象。(我一点也不清楚你为什么要得到 太多了 错误。)

    有一个管道命令, git hash-object ,可以创建任何类型的新对象。其他命令基本上是内置的 git哈希对象 对于他们需要的对象类型,例如。, git write-tree 使用索引创建一些树对象,然后 git commit-tree 创建一个提交对象。使用 git add 为每个添加的文件创建一个松散对象;显然,在某些情况下,这可能是很多对象。

    因此,创建大量松散对象非常容易,但一般来说,Git命令 那,也跑吧 git gc --auto 包装 他们会自动的。一旦他们被安全打包, git prune 移除松动的:

    吉特梅干 是一个危险的行动,可以摧毁东西。

    它不是特别危险,只要您在运行它的同时不做任何其他事情(例如,不运行任何可能被激活的Git命令) 创建 松散物体)。添加 --expire 14.days.ago git gc doeswell,它用你的 gc.pruneExpire 设置,但默认为 14.days.ago

    如果您正在积极地开发Git本身,并且在打包程序中引入了一个bug, 然后 实际上是多余的 .