假设我在有限的磁盘分区(例如,拇指驱动器)上有一个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 先压缩另一个驱动器上的数据库中的对象,然后在最终将压缩数据移回之前删除源对象。
所以我想说这是一个通常没有人遇到的边缘用例。今天的拇指驱动器足够大,这也不会那么容易成为问题。