ฉันต้องการค้นหาผู้ที่สร้างสาขา
ฉันสามารถทำได้ด้วย:
git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _
อย่างไรก็ตามสิ่งนี้จะคืนค่าผู้ส่งครั้งสุดท้ายต่อสาขาไม่จำเป็นต้องเป็นคนที่สร้างสาขา
ฉันต้องการค้นหาผู้ที่สร้างสาขา
ฉันสามารถทำได้ด้วย:
git branch -a | xargs -L 1 bash -c 'echo "$1 `git log --pretty=format:"%H %an" $1^..$1`"' _
อย่างไรก็ตามสิ่งนี้จะคืนค่าผู้ส่งครั้งสุดท้ายต่อสาขาไม่จำเป็นต้องเป็นคนที่สร้างสาขา
คำตอบ:
สาขาคืออะไรนอกจากตัวชี้การกระทำ เช่นนี้จะไม่ติดตามข้อมูลเมตาเช่น "ใครเป็นคนสร้างฉัน" ดูด้วยตัวคุณเอง ลองcat .git/refs/heads/<branch>
ในพื้นที่เก็บข้อมูลของคุณ
ที่เขียนถ้าคุณเป็นจริงในการติดตามข้อมูลนี้ในพื้นที่เก็บข้อมูลของคุณตรวจสอบ รายละเอียดสาขา ช่วยให้คุณสามารถแนบข้อมูลเมตาไปยังสาขาอย่างน้อยในท้องถิ่น
นอกจากนี้คำตอบของ DarVar ด้านล่างเป็นวิธีที่ชาญฉลาดในการรับข้อมูลนี้
รายชื่อสาขา Git ระยะไกลตามผู้แต่งเรียงตามวันที่เดินทาง:
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' --sort=committerdate
git for-each-ref --format='%(committerdate)%09%(authorname)%09%(refname)' | sort -k5n -k2M -k3n -k4n | grep remotes | awk -F "\t" '{ printf "%-32s %-27s %s\n", $1, $2, $3 }'
(ได้แนวคิดจากstackoverflow.com/a/3631819 - อาจจำเป็นต้องปรับตัวเลขใน awk printf ขึ้นอยู่กับความยาวสูงสุด datetime / ผู้เขียนชื่อยาว)
ฉันปรับแต่งคำตอบก่อนหน้านี้โดยใช้--sort
แฟล็กและเพิ่มสี / การจัดรูปแบบ:
git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=authordate refs/remotes
git for-each-ref --format='%(authorname) %09 -%(refname)' | sort
การเพิ่มคำตอบของ DarVar :
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -k5n -k2M -k3n -k4n | awk '{print $7 $8}'
PS: เราใช้ AWK เพื่อพิมพ์ผู้แต่งและสาขาระยะไกล
คุณสามารถหาที่สร้างสาขาในของคุณท้องถิ่นพื้นที่เก็บข้อมูลโดย
git reflog --format=full
ตัวอย่างผลลัพธ์:
commit e1dd940
Reflog: HEAD@{0} (a <a@none>)
Reflog message: checkout: moving from master to b2
Author: b <b.none>
Commit: b <b.none>
(...)
แต่นี่อาจจะไร้ประโยชน์ตามปกติในพื้นที่เก็บข้อมูลในท้องถิ่นของคุณเท่านั้นที่คุณสร้างสาขา
ข้อมูลจะถูกเก็บไว้ที่ ./.git/logs/refs/heads/ สาขา ตัวอย่างเนื้อหา:
0000000000000000000000000000000000000000 e1dd9409c4ba60c28ad9e7e8a4b4c5ed783ba69b a <a@none> 1438788420 +0200 branch: Created from HEAD
การกระทำครั้งสุดท้ายในตัวอย่างนี้มาจากผู้ใช้ "b" ในขณะที่สาขา "b2" ถูกสร้างขึ้นโดยผู้ใช้ "a" หากคุณเปลี่ยนชื่อผู้ใช้ของคุณคุณสามารถตรวจสอบว่าการอ้างอิง git นำข้อมูลจากบันทึกและไม่ได้ใช้ผู้ใช้ท้องถิ่น
ฉันไม่รู้เกี่ยวกับความเป็นไปได้ที่จะส่งข้อมูลบันทึกท้องถิ่นนั้นไปยังที่เก็บส่วนกลาง
เราสามารถหาคำตอบได้จากชื่อบัญชีอัตโนมัติ
git for-each-ref --format='%(authorname) %09 %(if)%(HEAD)%(then)*%(else)%(refname:short)%(end) %09 %(creatordate)' refs/remotes/ --sort=authorname DESC
สมมติว่า:
master
master
ๆ git log --format="%ae %an" master..<HERE_COMES_THE_BRANCH_NAME> | tail -1
ฉันรู้ว่านี่ไม่ใช่ขอบเขตของคำถามทั้งหมด แต่หากคุณพบว่าจำเป็นต้องกรองเฉพาะการกระทำโดยผู้เขียนเฉพาะคุณสามารถไปที่ grep :)
# lists all commits in chronological order that
# belong to the github account with
# username `MY_GITHUB_USERNAME` (obviously you
# would want to replace that with your github username,
# or the username you are trying to filter by)
git for-each-ref --format='%(committerdate) %09 %(authorname) %09 %(refname)' | sort -committerdate | grep 'MY_GITHUB_USERNAME'
การเข้ารหัสที่มีความสุข! :)
สำหรับผู้ที่กำลังมองหา DESC ... ดูเหมือนว่าจะใช้ได้ --sort=-
สำหรับการจัดรูปแบบใหม่สำหรับ ... ดวงตาของฉันกำลังสูญเสียบางส่วนของแดงก่ำ
git for-each-ref --format='%(color:cyan)%(authordate:format:%m/%d/%Y %I:%M %p) %(align:25,left)%(color:yellow)%(authorname)%(end) %(color:reset)%(refname:strip=3)' --sort=-authordate refs/remotes
อ้างอิงเพิ่มเติม: https://stackoverflow.com/a/5188364/10643471
เท่าที่ฉันรู้คุณอาจเห็นว่าคุณเป็นผู้สร้างสาขาเท่านั้น สิ่งนี้จะถูกระบุโดยแถวแรกใน. git / ref / heads / <branch> หากลงท้ายด้วย "สร้างจากหัว" คุณเป็นผู้สร้าง