Получение истории без проверки - PullRequest
2 голосов
/ 10 мая 2019

Для проекта мне нужно знать все коммиты между двумя ревизиями.

Обычно нужно просто клонировать репозиторий и проверить историю.Мне не нужно, чтобы файлы действительно присутствовали в файловой системе, я только вписан в саму историю.
Из-за особенностей больших репозиториев их клонирование может занять некоторое время.

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

Ответы [ 2 ]

4 голосов
/ 10 мая 2019

Ключевыми словами здесь являются " shallow clone ".

Извлечение данной ревизии может быть довольно длинным само по себе, но это не самая длинная операция при клонировании репозитория, поскольку всеОбъекты будут репатриированы в первую очередь перед извлечением данной ревизии.

Однако вы можете захотеть взглянуть на параметры --depth и --shallow-since git clone, которые позволят вам выбратьтолько кончики веток до данной точки.

Это позволит вам быстро получить самую свежую историю данного репозитория, которая, вероятно, вам больше всего нужна, затем снова использовать git fetch для репатриацииостальная часть ветки, если необходимо.

Извлечение единственной истории само по себе, к сожалению, невозможно (насколько я знаю), поскольку эта история не "записана" как целое в каком-то файле, но составленарекурсивные ссылки каждого объекта на его отцов один.

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

4 голосов
/ 10 мая 2019

Используйте --bare для своей операции клонирования, у вас будет git-репо без рабочего дерева (реальных файлов), но всей истории, доступной для проверки.

...