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

时间:2014-12-28 22:38:03

标签: 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

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

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

1 个答案:

答案 0 :(得分:2)

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

如果你考虑一下,数据损坏的风险太大,不允许Git首先在另一个驱动器上压缩数据库中的对象,然后在最终移回压缩数据之前删除源对象。

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