У индексных дескрипторов нет родительской информации, поэтому запись в каталоге и индексные дескрипторы разделены. Это записи каталога (или dentry ), у которых есть родители.
Это сделано для поддержки жестких ссылок. Поскольку жесткие ссылки указывают на один и тот же индексный дескриптор, они могут находиться в разных родительских каталогах ().
Есть куча отличий.
Прежде всего, чтобы просто удалить и клонировать, вы должны предположить, что ваша копия репозитория полностью синхронизирована с какой-то удаленной копией, и поэтому возможно создать лучше упакованный, но в остальном эквивалентный репозиторий со свежим клон. Это почти никогда не бывает, так как репозитории не должны быть синхронизированы, и ваша локальная копия может иметь изменения или ветки, которые вы хотите сохранить (, даже если они пусты ). Выполнение удаления с последующим клонированием приведет к потере всех этих данных, а git gc
— нет.
Во-вторых, вы не можете предполагать, что сервер автоматически создаст хороший пакет с хорошими дельтами на клоне. Большинство серверов Git будут тратить больше времени на периодическую упаковку данных с лучшими настройками, но будут обслуживать запросы, которые должны динамически упаковывать объекты с настройками, которые производят данные быстрее, но с более плохой упаковкой, поскольку они должны объединять данные из нескольких пакетов и нескольких push-уведомлений. Таким образом, выполнение периодической перепаковки самостоятельно может дать лучшие результаты, иногда очень значительные.
В-третьих, git gc
можно выполнить на месте, не вызывая простоя, в то время как клонирование -и -замена не может быть выполнена атомарно в Unix (, если вы не используете символические ссылки ). git gc
также может выполняться автоматически по мере необходимости, в то время как клон -и -заменить не могут.
В-четвертых, если вы полагаетесь на возможность использования reflogs для восстановления после неудачного нажатия или другой ошибки, clone -и -replace потеряют это, а git gc
— нет.
В-пятых, в зависимости от вашего сетевого подключения может быть быстрее просто запустить git gc
, чем клонировать новую копию. По причинам, указанным во втором пункте,вы можете в конечном итоге передать намного больше данных, в зависимости от того, как репозиторий упакован удаленно, чем вы ожидаете с заменой клона -и -.
В общем, я не знаю, чтобы кто-нибудь использовал клон -и -замену вместо перепаковки. Фактически, люди с очень большими репозиториями, как правило, автоматически извлекают и упреждающе упаковывают для повышения производительности, а не постоянно переклонируют.