Использовать другой раздел для временных операций 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 удалил бы временные файлы в "другом разделе"; и он бы изменил / удалил / добавил все необходимые файлы в репо "Исходный раздел" (производя восстановление пространства, если это возможно)?

1 ответ

Решение

Единственным вариантом будет переместить .git каталог где-нибудь еще, а затем используйте --git-dir возможность использовать это место вместо автоматического определения его из текущего рабочего каталога. Кроме того, нет, Git не сможет временно использовать другой диск.

И если подумать, риск повреждения данных слишком велик, чтобы Git сначала сжимал объекты из базы данных на другом диске, а затем удалял исходные объекты, прежде чем, наконец, переместить сжатые данные обратно.

Так что я бы сказал, что это тот случай использования, с которым обычно никто не сталкивается. А современные флеш-накопители достаточно велики, и это тоже не составит труда.

Другие вопросы по тегам