Сделайте неглубокий репозиторий GIT менее мелким

Я создаю неглубокий клон для указанного тега:

git clone --branch v0.1.3 --depth 1 file:///c/usr/sites/smc .

После этого клонированное репо имеет только тег v0.1.3 (и связанные файлы). У него нет истории для всех изменений до или после этого тега (как я понимаю - исправьте меня, если ошибаетесь). Затем я хотел бы обновить клон, чтобы включить v0.1.4. Если я использую команду "git fetch --unshallow", тогда я получаю полную историю, которую я не хочу. Есть ли способ расширить мой клон, чтобы включить более новую историю из мастера (например, v0.1.4 и 0.1.5), но не более старую историю (например, 0.1.2)? (Я вижу вариант, называемый update-small, но не понимаю, что он делает или имеет значение.)

Цель этого:

1) Сделайте начальную настройку репозитория на удаленном сервере быстрым и маленьким, не клонируя все репо. (Наше репо - это в основном двоичные файлы: DLL, EXE.)

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

ПРИМЕЧАНИЕ. Моя версия Git - 1.9.2.msysgit.0 в Windows 7. Это включает в себя недавние улучшения для мелкого клонирования. Вероятно, мы будем размещать основной репозиторий в Linux, но агенты, к которым мы развертываем, запускаем Windows. Цель состоит в том, чтобы управлять проверками с использованием кукольного предприятия.

UPDATE: Пробовал предложение VonC.

$ git fetch --update-shallow origin v0.1.4
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From file:///c/usr/sites/smc
 * tag               v0.1.4     -> FETCH_HEAD

[email protected] /c/usr/sites/smc-clone3 ((v0.1.3))
$ git describe
v0.1.3

[email protected] /c/usr/sites/smc-clone3 ((v0.1.3))
$ git tag --list
v0.1.3

Пока команда, казалось, что-то делала, я не вижу тег v0.1.4 в своем целевом репо. Однако, если я использую параметр --tags, я получаю все теги, но также и всю историю! Кроме того, я не понимаю обозначение "FETCH_HEAD" на выходе команды git fetch.

UPDATE: Дальнейшие исследования показывают, что этот вопрос SO стоит после аналогичной цели: git неглубокий клон к определенному тегу

Ответы

Ответ 1

Кажется, у меня был аналогичный вопрос и я нашел это позже. Хитрость заключалась в том, чтобы указать полный refspec в конце и глубине команды fetch. refs/tags/v0.1.3: refs/tags/v0.1.3 или тег v0.1.3 для коротких

Git мелкий выбор нового тега

git fetch --depth 1 origin tag v0.1.4