Я работаю над проектом, где я анализирую исходный код на каждом git push. Я ищу способы улучшить производительность/масштабируемость.Восстанавливающая версия кода «на лету» в Git
Простой реализацией будет выполнение «git checkout» на конкретной версии кода (фиксация), которую я хочу проанализировать. Это будет развертывать все файлы на жестком диске, а затем я могу читать все файлы по одному и анализировать их. Однако это связано с большим количеством ввода-вывода, и это сделало бы неэффективной попытку параллелизации алгоритма, анализирующего код.
Мое понимание внутренних элементов Git заключается в том, что git хранит файлы как объекты «blob» (которые хранятся в виде файлов на диске в папке .git). В некоторых случаях для сохранения дискового пространства может сохраняться только разность между версиями. Таким образом, по существу, не нужно делать по крайней мере одно чтение на файл.
Мне интересно, если есть способ воссоздать содержимое всех файлов из этого блоба, так же, как git делает с «git checkout», но вместо того, чтобы развернуть файлы на диске, содержимое всех файлов будет передаваться как один входной поток в алгоритм, пропуская дополнительные операции записи/чтения. Программа может затем параллельно выполнять выполнение алгоритма по мере необходимости/возможного для повышения производительности.
Любые, хотя я могу это сделать? Есть ли git "plumbing" tool/command, который может помочь с этим, или мне нужно изучить исходный код git?
'git show: ' показывает вам файл при данной фиксации; возможно, вы могли бы начать там? –
cmbuckley
Может быть, 'git fast-export' даст вам то, что вы хотите? – larsks
Спасибо за предложения, помогли. – krystalcode