Почему этот git мелкий клон больше, чем я ожидал?

У меня есть репо, размер которого составляет около 24 МБ, но файлы в проекте на самом деле всего около 2 МБ. У меня создалось впечатление, что мелкий клон с -depth 1 в значительной степени заставит меня приблизиться к 2МБ фактических файлов (без всего репо).

Когда я делаю неглубокий клон, новое репо показывает только текущую ветку, но размер идентичен (24 МБ) и смотрит на репо с gitx. Я могу увидеть всю историю до первоначальной фиксации.

Я бы хотел получить только текущее состояние файлов (для загрузки на сервер) без всякой истории. Я что-то делаю неправильно или просто неправильно понимаю цель мелкого клона?

Ответ 1

Если это локальный клон, клон может работать с жесткими связями объектов в вашем новом репозитории с теми, которые находятся в вашем старом репозитории (он делает это как оптимизацию в локальных файловых системах). Чтобы убедиться, что это так, вы можете отключить жесткую привязку:

git clone --depth 1 --no-hardlinks /path/to/repo.git

Если вы просто пытаетесь загрузить текущее состояние файлов на сервер, вы должны использовать git archive для создания ZIP или tar-архив вашего дерева.

Ответ 2

Я предлагаю это, потому что при выполнении локального клона git игнорирует --depth, потому что он поддерживает жесткие ссылки. Вы можете заставить поведение, которое вы ожидали, указав исходное репо с помощью file:///home/user/path/to/repo (то есть с префиксом file:///).

Это в документах.

Ответ 3

Как сказано в комментарии, это странно, потому что обычно не воспроизводится (см. этот поток).

Пример команды, которая должна работать:

$ git clone --depth 1 git://github.com/rails/rails.git shallow
Initialized empty Git repository in /home/me/shallow/.git/

Но в любом случае, при больших репозиториях, выигрыш, достигнутый с мелким клоном кажется не очень впечатляющим

Ответ 4

 git clone --depth 1 repo_url

должен делать то, что вы хотите.

Возможно, вы разместили опции после repo url? В какой-то системе они будут проигнорированы.