2

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

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

假设我尝试用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

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

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

4

1 回答 1

2

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

如果你仔细想想,数据损坏的风险太大了,无法让 Git 先从另一个驱动器上的数据库中压缩对象,然后在最终将压缩数据移回之前删除源对象。

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

于 2014-12-29T01:41:50.943 回答