Как использовать git в локально клонированных репозиториях для вывода списка заголовков запросов, статуса, даты в bash / shell - PullRequest
1 голос
/ 10 октября 2019

Я скопировал около 10000 репозиториев на локальный диск, чтобы провести некоторый анализ данных для университетского проекта.

До сих пор мне удавалось перебирать все папки с помощью сценария оболочки и извлекать комментарии, метки времени ии далее как CSV с использованием git log с некоторыми изменениями.

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

Я уже пытался использовать API github, к сожалению, из-зак большому объему данных, мне нужно извлечь мой предел доступа к github в 5000 запросов / час, быстро достигает предела.

Вот почему я загрузил все данные на внешний диск.

Чтобы получитьизвлекать данные запроса из папок репо, которые я пытался использовать git в сочетании с log --merges и --first-parent.

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

#!/bin/bash

#the first script looks like this. Works fine so far.
#loop through repo folders
cat repolist.txt | while read repolist; do

        #replace all "/" with "_" because of filename issues
        reponame="$(echo "$repolist" | tr '/:?+' '_')";
        #export results to textfiles with the right naming
        git -C test/$repolist log --pretty=format:%ad,%h,%an,%cn,%ae,%s > "exportedfiles/"$reponame".csv";

done

## the second script looks like this so far
git -C folder/repofolder log --first-parent --merges >name.txt

ожидаемый результат должен дать что-то вроде: дата запроса на извлечение |заголовок запроса на извлечение |статус pull-запроса (объединить, закрыть, открыть)

Я благодарен за любые идеи по этой проблеме.

1 Ответ

1 голос
/ 10 октября 2019

Проблема в том, что pull-запросы не являются концепцией git. Это часть «добавленной стоимости», которую предоставляют хостинговые решения, такие как github.

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

github использует ссылки для представления хотя бы некоторой информации о запросах на получение, но они не являются ссылками, которые обычные clone пытаются скопировать. Если вы клонируете с опцией --mirror, вы найдете ссылки с именами refs/pull/<#>/head и refs/pull/<#>/merge.

(Вы также можете использовать git fetch, чтобы специально запросить эти ссылки для репо, который был клонирован "нормальный "путь".)

Но, насколько я могу судить по примерному репо, это вся информация, которую вы получаете;они указывают прямо на COMMIT объекты (как легкие теги), поэтому они не передают никаких дополнительных метаданных. Предположительно сервер github имеет свою собственную запись информации о PR, и эта запись просто не доступна локально

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...