ในโลกของการพัฒนาซอฟต์แวร์ การเข้าใจว่าใครเป็นผู้เขียนโค้ดส่วนใดเป็นสิ่งสำคัญสำหรับการทำงานร่วมกัน การแก้ไขข้อบกพร่อง และการแบ่งปันความรู้ ในขณะที่คำสั่ง blame
ที่มีอยู่ใน Git เป็นเครื่องมือที่นิยมใช้มานาน เครื่องมือคำสั่งใหม่แบบโอเพนซอร์สที่เรียกว่า git-who
กำลังได้รับความสนใจเพราะให้ข้อมูลเชิงลึกเกี่ยวกับความเป็นเจ้าของโค้ดและรูปแบบการมีส่วนร่วมที่ลึกซึ้งยิ่งขึ้น
ทำความเข้าใจ Git Blame เทียบกับ Git Who
Git blame ถูกเข้าใจผิดโดยนักพัฒนาจำนวนมาก ดังที่ผู้แสดงความคิดเห็นคนหนึ่งชี้ให้เห็นว่า Git blaming เป็นสิ่งที่คนจำนวนมากเข้าใจผิด มันไม่ใช่เรื่องของใครทำอะไร แต่เป็นเรื่องของ commit ไหนที่เป็นต้นเหตุ ซึ่งแตกต่างกัน ในขณะที่ git blame แสดงว่า commit ใดแก้ไขแต่ละบรรทัดของโค้ดล่าสุด git-who ใช้วิธีการที่แตกต่างโดยวิเคราะห์รูปแบบการมีส่วนร่วมในไฟล์และไดเรกทอรีทั้งหมด ทำให้เห็นภาพรวมของความเป็นเจ้าของโค้ดได้อย่างครอบคลุมมากขึ้น
ความแตกต่างที่สำคัญคือ git blame มุ่งเน้นการระบุผู้เขียนแบบบรรทัดต่อบรรทัด ในขณะที่ git-who ช่วยตอบคำถามที่กว้างขึ้นเกี่ยวกับผู้ที่มีส่วนร่วมมากที่สุดในส่วนต่างๆ ของโค้ดเบสตลอดเวลา ความแตกต่างนี้มีความสำคัญอย่างยิ่งในโค้ดเบสขนาดใหญ่ที่มีผู้มีส่วนร่วมจำนวนมาก ซึ่งการทำความเข้าใจภาพรวมของความเป็นเจ้าของโค้ดอาจเป็นเรื่องท้าทาย
ปัญหาของ Git Blame แบบดั้งเดิม
Git blame แบบดั้งเดิมมีข้อจำกัดที่ git-who พยายามแก้ไข ตัวอย่างเช่น เมื่อนักพัฒนาทำการปรับโครงสร้างโค้ดขนาดใหญ่ จัดรูปแบบโค้ดใหม่ หรือย้ายไฟล์ git blame จะระบุว่าบรรทัดเหล่านั้นทั้งหมดเป็นของคนที่ทำการเปลี่ยนแปลงเหล่านั้น แม้ว่าพวกเขาจะไม่ได้เขียนโค้ดต้นฉบับก็ตาม
หนึ่งในสิ่งที่น่าหงุดหงิดมากเกี่ยวกับ 'git blame' เกิดขึ้นเมื่อทำความสะอาดโค้ดเบสเก่า: ในงานปัจจุบันของฉัน ฉันต้องย้ายไฟล์จำนวนมาก รวม repos จัดรูปแบบโค้ดใหม่ ฯลฯ 'git blame' และเครื่องมือที่คล้ายกันมักจะแสดงชื่อของฉันเสมอ แม้ว่าฉันไม่ได้เขียนโค้ดนั้นก็ตาม
ปัญหานี้เด่นชัดเป็นพิเศษในองค์กรขนาดใหญ่ที่การเข้าใจความเป็นเจ้าของโค้ดที่แท้จริงมีความสำคัญต่อการแบ่งปันความรู้และการบำรุงรักษา Git-who ให้มุมมองที่แตกต่างกันเกี่ยวกับรูปแบบการมีส่วนร่วมที่สามารถช่วยแก้ไขข้อจำกัดเหล่านี้
คุณสมบัติและความสามารถ
Git-who มีคำสั่งย่อยหลายคำสั่งที่ให้มุมมองต่างๆ เกี่ยวกับความเป็นเจ้าของโค้ด คำสั่งย่อย log
สรุปโครงสร้างไฟล์และ commit อย่างมีข้อมูลเชิงลึกมากกว่าเครื่องมือ git มาตรฐาน คำสั่งย่อย user
ช่วยตรวจสอบการมีส่วนร่วมในเส้นทางเฉพาะในโครงสร้างไฟล์ ในขณะที่คำสั่งย่อย tag
ระบุผู้เขียนตามจำนวนไฟล์ที่แก้ไข
คุณสมบัติที่มีประโยชน์เป็นพิเศษคือความสามารถในการแสดงไทม์ไลน์การมีส่วนร่วมด้วยคำสั่งย่อย bug
ซึ่งสร้างฐานข้อมูลของงานที่เรียงลำดับไทม์ไลน์ของการมีส่วนร่วมในโปรเจกต์ สิ่งนี้มีค่าอย่างยิ่งสำหรับการทำความเข้าใจว่าโปรเจกต์พัฒนาอย่างไรตลอดเวลาและใครรับผิดชอบส่วนประกอบต่างๆ ในช่วงเวลาที่แตกต่างกัน
เครื่องมือนี้ยังรองรับการกรองตามผู้เขียน กรอบเวลา และพารามิเตอร์อื่นๆ ทำให้มีความยืดหยุ่นสำหรับกรณีการใช้งานต่างๆ นอกจากนี้ ยังมีการแคชข้อมูลตามรายการพื้นฐานของแต่ละ repository ซึ่งช่วยเพิ่มประสิทธิภาพสำหรับการสืบค้นซ้ำ
ตัวเลือกการติดตั้งสำหรับ git-who:
- ไบนารีที่คอมไพล์แล้ว: มีให้ในส่วน Releases
- ตัวจัดการแพ็คเกจ:
- Homebrew:
brew install onkarshirge/tap/git-who
- Homebrew:
- จากซอร์สโค้ด:
- ต้องการ Go, Make และ Go toolchain
go install github.com/sinclairtarget/git-who@latest
- Docker:
- สร้าง:
docker build -t git-who .
- รัน:
docker run -it --rm -v "$(pwd):$(pwd)" -w "$(pwd)" onkarshirge/git-who
- สร้าง:
คำสั่งย่อยที่สำคัญ:
log
: สรุปโครงสร้างไฟล์/คอมมิตuser
: แสดงการมีส่วนร่วมในเส้นทางไฟล์bug
: สร้างไทม์ไลน์ของการมีส่วนร่วมtag
: แท็กผู้เขียนตามจำนวนไฟล์ที่แก้ไข
การตั้งค่า Git Alias:
[alias]
who = "!f(){ git-who \"$@\"; }; f"
wlog = "!f(){ git-who log \"$@\"; }; f"
![]() |
---|
ภาพหน้าจอของพื้นที่เก็บข้อมูล GitHub ที่แสดงโครงสร้างโค้ดและประวัติผู้มีส่วนร่วมที่เกี่ยวข้องกับความสามารถของ git-who |
การตอบรับจากชุมชนและข้อเสนอแนะ
ชุมชนนักพัฒนาได้ตอบรับ git-who ในเชิงบวก โดยผู้ใช้หลายคนชื่นชมความเร็วและข้อมูลเชิงลึกที่ได้รับ ผู้ใช้คนหนึ่งรายงานว่าสำหรับโค้ดเบส Rails ที่มีอายุประมาณ 18 ปี มีผู้ร่วมพัฒนา 1,695 คนและมีการ commit มากกว่า 220,000 ครั้ง git-who ทำการวิเคราะห์เสร็จสิ้นในเวลาไม่ถึง 3 วินาที
ผู้ใช้ยังได้เสนอการปรับปรุงที่เป็นไปได้ เช่น การเพิ่มสถิติที่อิงจาก blame เพื่อแสดงเจ้าของโมดูลหรือไฟล์ที่แท้จริง การสนับสนุนการรวม/ยกเว้นตามรูปแบบ (คล้ายกับฟังก์ชัน .gitignore) และไฟล์การกำหนดค่าเพื่อจัดเก็บการตั้งค่าที่ต้องการ
นักพัฒนาบางคนสังเกตว่า git-who เสริมเครื่องมือที่มีอยู่เช่น git shortlog -sn
ซึ่งให้การนับจำนวน commit อย่างง่ายตามผู้มีส่วนร่วม อย่างไรก็ตาม ดังที่ผู้แสดงความคิดเห็นคนหนึ่งชี้ให้เห็น จำนวน commits ไม่ใช่ตัวชี้วัดที่ดีมากในการวัดการมีส่วนร่วม มันจะใช้ได้ก็ต่อเมื่อมีการตกลงรูปแบบของ commits และทุกคนยึดติดกับรูปแบบนั้น
การผสานกับเวิร์กโฟลว์ที่มีอยู่
Git-who สามารถผสานเข้ากับเวิร์กโฟลว์ Git ที่มีอยู่ได้อย่างง่ายดาย เครื่องมือนี้สามารถติดตั้งผ่านตัวจัดการแพ็คเกจเช่น Homebrew หรือคอมไพล์จากซอร์สโค้ด ผู้ใช้สามารถตั้งค่า Git aliases เพื่อให้ใช้งานได้ง่ายยิ่งขึ้น ทำให้สามารถใช้คำสั่งเช่น git who
หรือ git wlog
แทนไวยากรณ์ git-who
แบบเต็ม
สำหรับผู้ที่ทำงานในสภาพแวดล้อมแบบคอนเทนเนอร์ git-who สามารถรันเป็นคอนเทนเนอร์ Docker โดยไม่จำเป็นต้องติดตั้งโดยตรงบนเครื่องโฮสต์ ความยืดหยุ่นนี้ทำให้นักพัฒนาในสภาพแวดล้อมต่างๆ และมีความชอบในเวิร์กโฟลว์ที่แตกต่างกันสามารถเข้าถึงได้
ในขณะที่ทีมพัฒนายังคงมองหาวิธีที่ดีขึ้นในการเข้าใจความเป็นเจ้าของโค้ดและรูปแบบการมีส่วนร่วม เครื่องมือเช่น git-who แสดงถึงวิวัฒนาการในวิธีที่เราคิดและวิเคราะห์ความเป็นเจ้าของโค้ด โดยการให้ข้อมูลเชิงลึกที่ลึกซึ้งกว่าการระบุผู้เขียนแบบบรรทัดต่อบรรทัดอย่างง่าย git-who ช่วยให้ทีมเข้าใจโค้ดเบสของพวกเขาได้ดีขึ้นและทำงานร่วมกันได้อย่างมีประสิทธิภาพมากขึ้น
อ้างอิง: git-who