Чи можу я отримати git, щоб розповісти про всі файли, які один користувач змінив?


147

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

Мій конкретний випадок використання полягає в тому, що я брав участь у проекті 188 rubin on rails, і ми хочемо знати, які файли вже зроблені та які файли ще потрібно зробити. Запропоновані користувачі виконували роботу лише над i18n, а не над рештою кодової бази. Таким чином, вся інформація повинна бути в git, але я не впевнений, як її вивести.

Відповіді:


127

Це не єдиний спосіб, але він працює:

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 for --комітер, якщо потрібно.


1
--name-onlyЗдається, що результат не має нічого, крім імен файлів. З огляду на цей факт, які варіанти --statта --pretty=format:""досягнення? Не могли б ви їх залишити?
Йона

1
@Jonah --pretty = формат: "" потрібен. Я відредагував відповідь.
Ян Келінг

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 repo.

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

Показує всі модифіковані файли за іменем автора 'user' в git repo.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.