假设我在有限的磁盘分区(例如,拇指驱动器)上有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
将删除“另一个分区”上的临时文件;并且它会修改/删除/添加“原始分区”仓库中的所有必要文件(如果可能的话,影响空间回收)?
答案 0 :(得分:2)
唯一的选择是将.git
目录移动到其他位置,然后使用--git-dir
选项来使用该位置,而不是自动从当前工作目录中找出它。除此之外,不,Git将无法暂时使用不同的驱动器。
如果你考虑一下,数据损坏的风险太大,不允许Git首先在另一个驱动器上压缩数据库中的对象,然后在最终移回压缩数据之前删除源对象。
所以我会说这是一个没有人经常遇到的边缘用例。而今天的拇指驱动器足够大,这也不会轻易成为问题。