Ключевыми словами здесь являются " shallow clone ".
Извлечение данной ревизии может быть довольно длинным само по себе, но это не самая длинная операция при клонировании репозитория, поскольку всеОбъекты будут репатриированы в первую очередь перед извлечением данной ревизии.
Однако вы можете захотеть взглянуть на параметры --depth
и --shallow-since
git clone
, которые позволят вам выбратьтолько кончики веток до данной точки.
Это позволит вам быстро получить самую свежую историю данного репозитория, которая, вероятно, вам больше всего нужна, затем снова использовать git fetch
для репатриацииостальная часть ветки, если необходимо.
Извлечение единственной истории само по себе, к сожалению, невозможно (насколько я знаю), поскольку эта история не "записана" как целое в каком-то файле, но составленарекурсивные ссылки каждого объекта на его отцов один.
Итак, что-то действительно грязное можно сделать, если у вас есть доступ (даже еслиead-only) в исходный подкаталог .git
нужно скопировать все файлы, расположенные в .git/objects
, но только те, которые известны как commit
(вы можете указать это с помощью git cat-file -t
).Эта вещь сама по себе будет разбита, потому что ни деревья, ни сами файлы не будут доступны в то время, когда вы это делаете, но вы все равно сможете получить их с помощью git remote update
или аналогичной операции.