Команда Git, которая возвращает только журнал изменений и имя файла

Я занимаюсь исследованием интеллектуального анализа данных, и мне нужно иметь возможность извлекать из репозитория git все имена файлов с соответствующим журналом изменений и передавать их в текстовый файл.

Я заинтересован в разборе журнала изменений каждого соответствующего файла и нахождении идентификатора ошибки bugzilla, связанного с ним.

Пока что команда:

git log --stat > gitoutputlog1.txt

приближает меня к тому, что я хочу, но там есть много информации, которая мне не нужна, и потенциально может запутать мой анализатор.

У кого-нибудь есть идеи для bash-скрипта или команды, которые могут делать то, что я хочу конкретно и чисто?

3 ответа

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

doit() {
    bugnumber=$(git cat-file -p $1 | your-message-parser-here)
    git diff --name-only $1^! | xargs -n1 -d\\n echo $bugnumber 
}
git rev-list | doit

git log --name-only возвращает легко анализируемый формат, каждое имя файла находится на отдельной строке, и нет никакого необычного форматирования. Вы также можете посмотреть на --format аргумент, он принимает строку формата с %X заполнители для всех битов информации.

Я пытаюсь добиться того, что я понимаю из вопроса. Это может быть не совсем то, что вы хотите, но я думаю, что вы можете получить свой точный ответ из этого.

Чтобы получить все имена файлов, вы должны клонировать репозиторий.

git clone http://github.com/{user}/{project} {dir_name}

Теперь вы можете написать такой скрипт

#!/bin/bash
FILES=/path/to/* #Give path to the directory you have cloned
for file in $FILES
do
  # $file store current file name
  git log $file --oneline >> somefile.txt 
done

Я прямо выкладываю вывод git log $file --oneline в выходном файле. Вам нужно манипулировать им, извлекать идентификатор bugzilla и отправлять в выходной файл правильно.

Другие вопросы по тегам