2015-11-09 2 views
1

git clone --depth N ... создает мелкий клон с историей, ограниченной последними N ревизиями, и я могу использовать git clone -b tag ... для извлечения коммитов с tag. Однако есть ли способ получить репозиторий (или его ветвь) от определенного (помеченного) фиксации до головки ветви?Git: мелкие копии с определенного фиксации

Скажем, например, я хотел бы клонировать только историю, начиная с определенного тега релиза. Так что, если последние несколько коммитов в удаленном выглядеть так

[master] ... 
[master~1] ... 
[master~2] ... <-- tag: x.x 
[master~3] ... 
... 

Теперь я хотел бы клонировать диапазон истории x.x~1.., без необходимости вручную подсчитать количество изменений, чтобы дать --depth.

Я думаю, что объяснение, приведенное в принятом ответе на Why Isn't There A Git Clone Specific Commit Option?, также применяется здесь, поэтому может быть не прямой путь.

ответ

0

Действительно, нет прямого способа, и этот тип подсчета или клонирование с использованием нескольких ссылок должно быть реализовано на стороне сервера (сервер, предоставляющий начальный мелкий клон), чтобы он работал в рамках ограничений git.

Существует косвенный путь: начинайте с глубины 1 мелкого клона, затем углубляйтесь до тех пор, пока не появится метка. Раздражающе, git fetch --depth=<N> не заберет новые теги (но вы можете использовать git ls-remote или аналогично получить все один раз на клиенте мелкого клонирования и посмотреть SHA-1). Но я подозреваю, что этот метод будет настолько медленным, чтобы сделать его совершенно бесполезным.

0

Если работает, по крайней мере Git 2.11 как на клиентской и серверной стороне, есть обходные, если вы знаете, дата меченых фиксации и какой ветви он находится на:

git clone --branch <branch that contains tag> --shallow-since=<date of tagged commit> <url> 
Смежные вопросы