В чем разница между `git gc` и `git clone`?

У индексных дескрипторов нет родительской информации, поэтому запись в каталоге и индексные дескрипторы разделены. Это записи каталога (или dentry ), у которых есть родители.

Это сделано для поддержки жестких ссылок. Поскольку жесткие ссылки указывают на один и тот же индексный дескриптор, они могут находиться в разных родительских каталогах ().

2
17.04.2020, 16:37
1 ответ

Есть куча отличий.

Прежде всего, чтобы просто удалить и клонировать, вы должны предположить, что ваша копия репозитория полностью синхронизирована с какой-то удаленной копией, и поэтому возможно создать лучше упакованный, но в остальном эквивалентный репозиторий со свежим клон. Это почти никогда не бывает, так как репозитории не должны быть синхронизированы, и ваша локальная копия может иметь изменения или ветки, которые вы хотите сохранить (, даже если они пусты ). Выполнение удаления с последующим клонированием приведет к потере всех этих данных, а git gc— нет.

Во-вторых, вы не можете предполагать, что сервер автоматически создаст хороший пакет с хорошими дельтами на клоне. Большинство серверов Git будут тратить больше времени на периодическую упаковку данных с лучшими настройками, но будут обслуживать запросы, которые должны динамически упаковывать объекты с настройками, которые производят данные быстрее, но с более плохой упаковкой, поскольку они должны объединять данные из нескольких пакетов и нескольких push-уведомлений. Таким образом, выполнение периодической перепаковки самостоятельно может дать лучшие результаты, иногда очень значительные.

В-третьих, git gcможно выполнить на месте, не вызывая простоя, в то время как клонирование -и -замена не может быть выполнена атомарно в Unix (, если вы не используете символические ссылки ). git gcтакже может выполняться автоматически по мере необходимости, в то время как клон -и -заменить не могут.

В-четвертых, если вы полагаетесь на возможность использования reflogs для восстановления после неудачного нажатия или другой ошибки, clone -и -replace потеряют это, а git gc— нет.

В-пятых, в зависимости от вашего сетевого подключения может быть быстрее просто запустить git gc, чем клонировать новую копию. По причинам, указанным во втором пункте,вы можете в конечном итоге передать намного больше данных, в зависимости от того, как репозиторий упакован удаленно, чем вы ожидаете с заменой клона -и -.

В общем, я не знаю, чтобы кто-нибудь использовал клон -и -замену вместо перепаковки. Фактически, люди с очень большими репозиториями, как правило, автоматически извлекают и упреждающе упаковывают для повышения производительности, а не постоянно переклонируют.

4
19.03.2021, 02:28

Теги

Похожие вопросы