Извлекайте метаинформацию из Git, позволяйте журналу git без получения полного репо - PullRequest
0 голосов
/ 13 сентября 2018

При использовании Git в развертывании часто требуется знать историю и отношения коммитов. Когда репо мало, проблем нет. Но для больших репозиториев, чтобы получить полную историю, необходимо выбрать все объекты. Эта операция требует большой полосы пропускания и занимает много времени.

Итак, проблема:

нужно работать с историей большого репозитория Git без извлечения контента.

Было бы неплохо получить несколько МБ и начать работать git log, git rev-parse, git rev-list и т. Д. Без возможности извлечения содержимого.

idea1. выделенная ветка _metainfo с необработанным выводом из журнала git

Сохранить вывод git log в выделенную ветку. Но этот подход потребует собственного парсера.
Это подходит для очень простых задач.

idea2. обрезать содержимое файла

git filter-branch tree-filter "echo >**" (псевдокод). Это изменит хэш коммитов, но сохранит сообщения и даты коммитов. И старый хеш коммита может быть добавлен в фильтрованное сообщение коммита

UPD .
Спасибо за ответы. Я уже прочитал возможные дубликаты и узнал: "на данный момент нет решения" . В ходе этого исследования я реализовал свою первую идею как простой обходной путь, а второй - как концепцию рабочего решения. Оба они дают полуиспользуемые результаты. Я бы подготовил и опубликовал их, если бы сообщество заинтересовалось.

1 Ответ

0 голосов
/ 13 сентября 2018

То, что вы ищете, сегодня недоступно.Вы можете сделать что-то вроде того, что вы предлагаете, но авторы Git работают над другим подходом.В Git 2.19 есть несколько строительных блоков: пакеты промисора предоставляют возможность записывать, что некоторые объекты существуют, и их можно получить через сеть от какого-либо провайдера, но на самом деле они не хранятся в текущем Git.репозиторий.

Репозиторий, содержащий объекты фиксации, но имеющий только обещания для всех файловых объектов, будет способен git log (без -p).Выборка некоторых или всех обещанных объектов дерева и блоба включит -p и другие дополнительные операции.После того как все обещания будут выполнены, у вас появится нормальное хранилище.

Однако даже в Git 2.19 нет всего кода, необходимого для этой работы.Он имеет только концепцию обещаний.См. эту запись в блоге GitHub (ссылка идет прямо на работу "частичное клонирование") или примечания по техническому проектированию исходного кода Git .

...