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

标签 git git-gc

假设我有一个 git存储库位于有限的磁盘分区(例如拇指驱动器)上。

假设我上次推送该存储库失败,因为当前分区已完全填满。

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

$ git gc --prune=now
fatal: failed to write ref-pack file: No space left on device
error: failed to run pack-refs

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

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

最佳答案

唯一的选择是将 .git 目录移动到其他位置,然后使用 --git-dir 选项来使用该位置,而不是自动计算它从当前工作目录中退出。除此之外,不,Git 将无法暂时使用不同的驱动器。

如果你仔细想想,数据损坏的风险太大了,不允许 Git 首先压缩另一个驱动器上数据库中的对象,然后删除源对象,最后将压缩的数据移回原处。

所以我想说这是一个通常没有人遇到的边缘用例。如今的拇指驱动器足够大,这也不会轻易成为问题。

关于git - 使用另一个分区进行临时 git 操作 (git gc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27681296/

相关文章:

git - 如何使用 GitHub V3 API 获取 repo 的提交计数?

git - 在 Git 中将本地 master 分支与远程 master 分支 merge

git - 中止后恢复最后的交互式 rebase TODO?

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

multithreading - git gc 的线程数取决于 repo 大小

git - 尝试重定向 'git gc' 输出

Git-Tfs:每个 Git 提交的 TFS 变更集?

所有 repo 的 Git 状态

带配额的机器上的 git gc

git - git gc/git repack 输出的 "Total"行中的数字是什么意思?