Могу ли я получить Git, чтобы сказать мне все файлы, которые один пользователь изменил?


148

Я хотел бы, чтобы git предоставил мне список всех файлов, измененных одним пользователем, во всех коммитах.

Мой конкретный пример использования - это то, что я участвовал в i18n проекта ruby ​​on rails, и мы хотим знать, какие файлы уже были сделаны, а какие еще нужно сделать. Рассматриваемые пользователи работали только на i18n, а не на остальной части кода. Так что информация должна быть в git, но я не знаю, как ее получить.

Ответы:


128

Это не единственный способ, но он работает:

git log --pretty="%H" --author="authorname" |
    while read commit_hash
    do
        git show --oneline --name-only $commit_hash | tail -n+2
    done | sort | uniq

Или как одна строка:

git log --pretty="%H" --author="authorname" | while read commit_hash; do git show --oneline --name-only $commit_hash | tail -n+2; done | sort | uniq

184

Это даст вам простой список файлов, ничего больше:

git log --no-merges --author="Pattern" --name-only --pretty=format:"" | sort -u

При необходимости переключите --author для --committer.


1
--name-onlyкажется, чтобы сделать вывод ничего, кроме имен файлов. Учитывая этот факт, каковы варианты --statи --pretty=format:""достижения? Не могли бы вы оставить их?
Иона

1
@Jonah --pretty = format: "" необходимо. Я отредактировал ответ.
Ян Келлинг

2
работает отлично, хотя есть один маленький глюк: он генерирует пустую ссылку в начале вывода, что означает, что передача результата через 'wc -l' для получения количества файлов отключена на 1.
joachim

Как я могу исключить файлы, которые были удалены?
Тим

8

Попробуй git log --stat --committer=<user>. Просто введите имя пользователя в --committer=опции (или используйте --author=по необходимости).

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


0
git log --pretty= --author=@abcd.com --name-only | sort -u | wc -l

Показывает все измененные файлы компании в репозитории git.

git log --pretty= --author=user@abcd.com --name-only | sort -u | wc -l

Показывает все измененные файлы по имени автора 'user' в репозитории git.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.