Могу ли я получить 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.

h0tw1r3
источник
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.

Абхиджит Кандалкар
источник