ฉันจะดูบันทึกการคอมไพล์ของผู้ใช้เพียงรายเดียวได้อย่างไร?


1257

เมื่อใช้git logฉันจะกรองโดยผู้ใช้อย่างไรเพื่อให้ฉันเห็นเฉพาะการกระทำจากผู้ใช้รายนั้น


4
มีวิธีดูสิ่งเดียวกันโดยตรงgithubหรือไม่
Vadorequest

1
ในการทำเช่นนี้กับ github: stackoverflow.com/a/23515164/26510
Brad Parks

คำตอบ:


1714

สิ่งนี้ใช้ได้ทั้งgit logและgitk- 2 วิธีที่ใช้กันทั่วไปในการดูประวัติ
คุณไม่จำเป็นต้องใช้ชื่อเต็ม:

git log --author="Jon"

จะจับคู่ความมุ่งมั่นของ "Jonathan Smith"

git log --author=Jon

และ

git log --author=Smith

ก็จะทำงานเช่นกัน คำพูดเป็นตัวเลือกถ้าคุณไม่ต้องการช่องว่างใด ๆ

เพิ่ม--allถ้าคุณตั้งใจจะค้นหาสาขาทั้งหมดและไม่ใช่เพียงบรรพบุรุษของการกระทำปัจจุบันใน repo ของคุณ

คุณสามารถจับคู่กับผู้เขียนหลายคนได้อย่างง่ายดายเนื่องจาก regex เป็นกลไกพื้นฐานสำหรับตัวกรองนี้ ดังนั้นในการทำรายการโดย Jonathan หรือ Adam คุณสามารถทำได้:

git log --author="\(Adam\)\|\(Jon\)"

ในการแยกการกระทำโดยผู้เขียนหรือชุดของผู้เขียนโดยใช้การแสดงออกปกติตามที่ระบุไว้ในคำถามนี้คุณสามารถใช้lookahead เชิงลบร่วมกับ--perl-regexpสวิตช์:

git log --author='^(?!Adam|Jon).*$' --perl-regexp

อีกวิธีหนึ่งคุณสามารถยกเว้นการคอมมิทที่สร้างโดย Adam โดยการใช้bashและ piping:

git log --format='%H %an' | 
  grep -v Adam | 
  cut -d ' ' -f1 | 
  xargs -n1 git log -1

หากคุณต้องการยกเว้นกระทำมุ่งมั่น ( แต่ไม่จำเป็นต้องประพันธ์) โดยอดัมแทนที่ด้วย%an %cnรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้อยู่ในโพสต์บล็อกของฉันที่นี่: http://dymitruk.com/blog/2012/07/18/filtering-by-author-name/


9
มีวิธีทำในสิ่งที่ตรงกันข้ามหรือไม่? พูด - ฉันต้องการเห็นความมุ่งมั่นทั้งหมดยกเว้นของจอน
เอียนโรบินสัน

4
@Ian สำหรับคอมไพล์ช่วยเหลือเข้าสู่ระบบ "จอน" คือการแสดงออกปกติดังนั้นจึงควรจะสวยง่าย
sumek

2
git log --format =% an | egrep -v 'Jon *' | xargs -n 1 git log -1
Adam Dymitruk

4
มีวิธีใดที่จะทำให้gitkผู้ปกครองออกจากพันธะของผู้เขียนคนอื่น (แสดงด้วยวงกลมสีขาว) ในทางกลับกันgit log --graphจะไม่แสดงความมุ่งมั่น มันแสดงให้เห็นถึงความมุ่งมั่นของผู้เขียนที่ได้รับเท่านั้น gitkฉันชอบที่จะเห็นผลลัพธ์เดียวกันใน (ตรวจสอบการกำหนดค่าตามความชอบและแก้ไขการดูแล้ว - ไม่พบสิ่งใดมีประโยชน์)
ADTC

2
ระวังตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
Chiel ten Brinke


44

ใน GitHub ยังมีวิธีลับ ...

?author=github_handleคุณสามารถกรองกระทำโดยผู้เขียนในมุมมองกระทำโดยการผนวกพระราม ตัวอย่างเช่นลิงก์https://github.com/dynjs/dynjs/commits/master?author=jingwenoจะแสดงรายการของความมุ่งมั่นต่อโครงการ Dynjs


1
มีวิธีดูข้ามสาขาไหม? สิ่งที่ชอบกระทำ / ทั้งหมด?
whizcreed

คุณพบสิ่งนี้ได้อย่างไร ธงอื่น ๆ รองรับอะไรบ้าง
Woodrow Barlow

1
คำตอบของ pro.mean ว่าจะทำอย่างไรผ่านทางอินเทอร์เฟซ: stackoverflow.com/a/39123694/1225617
Adam Millerchip

ฉันไม่ชอบคำตอบนี้เพราะคำถามเกี่ยวข้องกับซอฟต์แวร์และไม่เกี่ยวข้องกับบริการเฉพาะ
Valerio Bozz

คำถามเป็นเพียงวิธีการดูบันทึก git - โดยไม่คำนึงถึงเทคโนโลยี ดังนั้นคำตอบนี้เหมาะกับการเรียกเก็บเงินได้ดี
slott

31
git help log

ให้ manpage ของบันทึกการคอมไพล์ ค้นหา "ผู้แต่ง" ที่นั่นโดยกด / จากนั้นพิมพ์ "ผู้แต่ง" ตามด้วย Enter พิมพ์ "n" สองสามครั้งเพื่อไปที่หัวข้อที่เกี่ยวข้องซึ่งจะแสดง:

git log --author="username"

ตามที่แนะนำไว้แล้ว

โปรดทราบว่าสิ่งนี้จะทำให้คุณเป็นผู้เขียนข้อผูกพัน แต่ใน Git ผู้เขียนอาจเป็นคนที่แตกต่างจากผู้ส่ง (ตัวอย่างเช่นใน Linux kernel หากคุณส่งแพทช์ในฐานะผู้ใช้ธรรมดา .) ดูความแตกต่างระหว่างผู้แต่งและผู้เดินทางใน Git หรือไม่ สำหรับรายละเอียดเพิ่มเติม)

ส่วนใหญ่สิ่งหนึ่งที่อ้างถึงเป็นผู้ใช้เป็นทั้งผู้ส่งและผู้เขียน


21
@ James ฉันคิดว่าการปฏิเสธของคุณที่นี่ไม่มีเหตุผล ฉันแค่พยายามสอนเขาถึงวิธีค้นหาจากบรรทัดคำสั่งในกรณีที่เขาลืม ฉันคิดว่าคุณผิดฉันสำหรับคนที่เพิ่งพูด RTFM แต่ฉันรวมคำตอบในคำตอบของฉัน
ustun

11
มันไม่ใช่การปฏิเสธ มันเป็นความจริงที่ว่าผู้คนมาที่นี่เพื่อขอคำแนะนำและผู้คนจำนวนมากต้องการที่จะตอบสนองกับ RTFM บางรุ่น เป็นลางบอกเหตุไม่ดีสำหรับชุมชน
James

11
@ James ฉันต้องเห็นด้วยกับ ustun ที่นี่ เขาไม่ตอบคำถามและเขาเสนอกลยุทธ์ในการหาคำตอบที่เป็นประโยชน์ในการหาคำตอบของคำถามคอมไพล์อื่น ๆ ที่เกี่ยวข้อง
ปีเตอร์

4
ฉันไม่คิดว่ามันจะเป็นขาวดำเหมือนนี้ ตอนนี้ฉันเห็นด้วยกับ unstun ที่เราควรให้ความรู้แก่ผู้คนถึงวิธีการทำสิ่งต่าง ๆ เพื่อตัวเอง - นั่นเป็นความคิดที่ดี ในกรณีที่ unstun ผิดพลาดเล็กน้อยก็คือการตั้งสมมติฐานก) OP รู้วิธีการค้นหาหน้าคนและที่สำคัญกว่า b) ที่ OP รู้วิธีค้นหา 'ผู้แต่ง' พวกเขาอาจค้นหา 'ผู้ส่ง' หรือ 'ชื่อ' หรือบางสิ่งบางอย่าง
John Hunt

6
@JohnHunt คุณพูดถูกมันไม่เคยเกิดขึ้นกับฉันเลยที่จะอธิบายว่าการค้นหาหมายถึงอะไรและทำอย่างไรในเวลานั้น ชนิดของมันสันนิษฐานว่า แก้ไขข้อความเล็กน้อย
ustun

23

เพื่อดึงรายละเอียดเพิ่มเติม - (ที่นี่%anหมายถึงผู้เขียน)

ใช้สิ่งนี้: -

git log --author="username" --pretty=format:"%h - %an, %ar : %s"

และถ้าคุณต้องการรูปแบบการใช้ที่อยู่อีเมลของพวกเขา%aeแทน%an(ซึ่งได้รับชื่อ)
MarkHu

--authorค้นหาตามชื่อจริงของผู้แต่งไม่ใช่ชื่อผู้ติดต่อ ฉันจะเปลี่ยน"username"เป็นผู้เขียน
อัลกอริทึม

17
cat | git log --author="authorName" > author_commits_details.txt

สิ่งนี้จะช่วยให้คุณผูกพันในรูปแบบข้อความ


20
วัตถุประสงค์ของการcat |คืออะไร?
Keith Thompson

1
@ KeithThompson เพื่อไล่ล่าเมาส์
nvd

14

หากคุณต้องการกรองการกระทำของคุณเอง:

git log --author="<$(git config user.email)>"

1
นอกจากนี้ยังใช้งานได้โดยไม่ต้องใส่เครื่องหมายคำพูดและเครื่องหมายวงเล็บ (อย่างน้อยใน git bash และ ubuntu bash)
Lavamantis

12

คุณสามารถย่อส่วนนี้ได้เพียงแค่ใช้ชื่อผู้ใช้:

git log --author=mr  #if you're looking for mrfoobar's commits

11

ลองใช้เครื่องมือนี้ https://github.com/kamranahmedse/git-standup

การใช้

```bash
$ git standup [-a <author name>] 
              [-w <weekstart-weekend>] 
              [-m <max-dir-depth>]
              [-f]
              [-L]
              [-d <days-ago>]
              [-D <date-format>] 
              [-g] 
              [-h]
```

ด้านล่างนี้เป็นคำอธิบายสำหรับแต่ละธง

- `-a`      - Specify author to restrict search to (name or email)
- `-w`      - Specify weekday range to limit search to (e.g. `git standup -w SUN-THU`)
- `-m`      - Specify the depth of recursive directory search
- `-L`      - Toggle inclusion of symbolic links in recursive directory search
- `-d`      - Specify the number of days back to include
- `-D`      - Specify the date format for "git log" (default: relative)
- `-h`      - Display the help screen
- `-g`      - Show if commit is GPG signed or not
- `-f`      - Fetch the latest commits beforehand

6

เนื่องจากคำถามอื่นถูกล็อค (อาจผิดโดยงั้นเหรอ?) ฉันจะใส่นี่:

แสดงผู้แต่งด้วยจำนวนการกระทำ:

git shortlog -nse

ค้นหาข้อผูกพันทั้งหมดสำหรับ USERNAME เฉพาะ:

git log --author=USERNAME --oneline | awk '{print $1}' | xargs git show

5

แสดงจำนวนบันทึกของ n ผู้ใช้ x ในสีโดยเพิ่มข้อมูลโค้ดนี้ลงในไฟล์. bashrc ของคุณ

gitlog() {
    if [ "$1" ] && [ "$2" ]; then
       git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1" --author="$2"
    elif [ "$1" ]; then
       git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order -n "$1"
    else
        git log --pretty=format:"%h%x09 %C(cyan)%an%x09 %Creset%ad%x09 %Cgreen%s" --date-order
    fi
}

alias l=gitlog

ในการแสดงการผูกพัน 10 ครั้งล่าสุดโดย Frank:

l 10 frank

ในการแสดงการผูกพัน 20 ครั้งล่าสุดโดยทุกคน:

l 20


4

หากใช้ GitHub:

  • ไปที่สาขา
  • คลิกที่กระทำ

มันจะแสดงรายการในรูปแบบด้านล่าง

branch_x: < comment> 
author_name committed 2 days ago
  • เพื่อดูความมุ่งมั่นของผู้เขียนแต่ละคน; คลิกที่author_name จาก นั้นคุณจะเห็นการกระทำทั้งหมดของผู้เขียนในสาขานั้น

2
มีการคลิกมากและถือว่าเป็นโฮสต์ repo git ไม่ตอบ CLI ที่ทำไปแล้ว
lacostenycoder

1
@lacostenycoder แต่เป็นข้อมูลที่มีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อมีโครงการ git จำนวนมากอยู่ใน GitHub!
Adam Millerchip

2

คุณสามารถใช้ = หรือ "ช่องว่าง" ตัวอย่างเช่นการติดตามสองคำสั่งจะส่งคืนค่าเดิม

git log --author="Developer1"

git log --author "Developer1"

1

กรณีของฉัน: ฉันใช้ต้นไม้ต้นกำเนิดฉันทำตามขั้นตอนต่อไปนี้:

  1. กด CRL+3
  2. เปลี่ยนผู้เขียนแบบเลื่อนลง
  3. พิมพ์ชื่อ "Vinod Kumar"

ป้อนคำอธิบายรูปภาพที่นี่


1

แม้ว่าจะมีคำตอบที่เป็นประโยชน์มากมาย ในขณะที่เพียงเพิ่มวิธีอื่น คุณยังสามารถใช้

git shortlog --author="<author name>" --format="%h %s"

มันจะแสดงผลลัพธ์ในลักษณะที่จัดกลุ่ม:

<Author Name> (5):
  4da3975f dependencies upgraded
  49172445 runtime dependencies resolved
  bff3e127 user-service, kratos, and guava dependencies upgraded
  414b6f1e dropwizard :- service, rmq and db-sharding depedencies upgraded
  a96af8d3 older dependecies removed

ที่นี่ทั้งหมด 5 กระทำจะกระทำโดย<Author Name>ภายใต้สาขาปัจจุบัน ในขณะที่คุณยังสามารถใช้--allบังคับใช้การค้นหาได้ทุกที่(ทุกสาขา)ในที่เก็บ git

One catch: git พยายามจับคู่อินพุต<author name>กับชื่อและอีเมลของผู้แต่งในฐานข้อมูล git มันเป็นกรณีๆ ไป

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