Команда 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 и отправлять в выходной файл правильно.