ฉันจะขอคอมไพล์บอกไฟล์ทั้งหมดที่ผู้ใช้คนหนึ่งได้ทำการแก้ไขได้หรือไม่?


147

ฉันต้องการคอมไพล์ให้รายการของไฟล์ทั้งหมดที่ถูกแก้ไขโดยผู้ใช้รายหนึ่งในทุกคอมมิท

กรณีการใช้งานเฉพาะของฉันคือฉันได้มีส่วนร่วมในโครงการ i18n ของ ruby ​​on Rails และเราต้องการทราบว่ามีไฟล์ใดบ้างที่ถูกทำไปแล้วและไฟล์ใดที่ยังต้องทำ ผู้ใช้ที่เป็นปัญหาได้ทำงานกับ i18n เท่านั้นไม่ใช่ส่วนที่เหลือของรหัสฐาน ข้อมูลทั้งหมดควรอยู่ในคอมไพล์ แต่ฉันไม่แน่ใจว่าจะนำออกมาได้อย่างไร

คำตอบ:


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

Switch - อนุญาตสำหรับ - คำสั่งตามความจำเป็น


1
--name-onlyดูเหมือนจะไม่ทำอะไรเลยนอกจากชื่อไฟล์ จากข้อเท็จจริงที่ว่าสิ่งที่เป็นตัวเลือก--statและ--pretty=format:""ประสบความสำเร็จ? คุณปล่อยพวกมันออกไปได้ไหม?
โยนาห์

1
@Jonah --pretty = format: "" เป็นสิ่งจำเป็น ฉันแก้ไขคำตอบ
Ian Kelling

2
ใช้งานได้ดีแม้ว่าจะมีข้อผิดพลาดเล็ก ๆ น้อย ๆ : มันจะสร้างลิงค์เปล่า ๆ ที่จุดเริ่มต้นของเอาต์พุตซึ่งหมายความว่าการ
ไพพ์

ฉันจะแยกไฟล์ที่ถูกลบได้อย่างไร
ทิมโบแลนด์

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

แสดงไฟล์ที่ปรับเปลี่ยนทั้งหมดตามชื่อผู้แต่ง 'ผู้ใช้' ใน git repo

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.