Git grep добавил и изменил файлы в коммите

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

A path/to/matched-file:match-of-added-line
M path/to/matched-file:match-of-modified-line
D path/to/matched-file:match-of-deleted-line

Где A / M / D означает, что линия была добавлена ​​/ изменена / удалена соответственно. У меня есть этот код до сих пор:

echo -n > log

# For each commit, in chronological order
for commit in $(git rev-list --reverse HEAD); do

    # Get A/M files in commit
    git diff --name-only "$commit" --diff-filter=A -- *.{c,h} > A_F &
    git diff --name-only "$commit" --diff-filter=M -- *.{c,h} > M_F &
    wait

    # Grep A lines in A files in commit (not sure what to do here)
    {
        git grep -I -e <pattern> "$commit" -- "$(tr '\n' ' ' < A_F)" \
            | sed "s/\^/A $commit/";
        git grep -I -e <pattern> "$commit" -- "$(tr '\n' ' ' < M_F)" \
            | sed "s/\^/M $commit/";
    } >> log

done
# Print result
cat log

Код успешно ищет строки в добавленных / измененных файлах, но я пока не знаю, как конкретно искать добавленные / удаленные / удаленные строки.

0 ответов

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