8 คะแนน โดย GN⁺ 2025-03-20 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • git-who เป็นเครื่องมือ CLI สำหรับค้นหาผู้รับผิดชอบต่อองค์ประกอบทั้งหมดหรือซับซิสเต็มย่อยของโค้ดเบส
  • ต่างจาก git blame ตรงที่ git-who ทำงานในระดับ ต้นไม้ไฟล์ เพื่อระบุผู้เขียนโค้ด
  • มีซับคอมมานด์ 3 แบบ โดยแต่ละคำสั่งย่อยจะแสดงมุมมองที่แตกต่างกันเกี่ยวกับความเป็นเจ้าของใน Git repository
    • table

      • เป็นค่าเริ่มต้น โดยจะแสดงตารางสรุปการมีส่วนร่วมของผู้เขียนทั้งหมดที่เคยคอมมิตใน repository
      • สามารถระบุพาธเพื่อกรองเฉพาะคอมมิตที่เกี่ยวข้องกับไฟล์ในพาธนั้นได้
      • สามารถระบุชื่อบรานช์, ชื่อแท็ก หรือ "commit-ish" เพื่อกรองเฉพาะคอมมิตที่เข้าถึงได้จากคอมมิตที่กำหนด
      • สามารถใช้แฟล็ก -m, -c, -l, -f เพื่อจัดเรียงตารางตามเมตริกต่าง ๆ ได้
    • tree

      • แสดงต้นไม้ไฟล์ โดยแต่ละโหนดจะแสดงผู้เขียนที่มีส่วนร่วมมากที่สุดในพาธนั้น
      • สามารถใช้แฟล็ก -a เพื่อใส่คำอธิบายประกอบให้ทุกไฟล์ได้
      • รองรับแฟล็ก -l, -f, -m, -c
    • hist

      • แสดงฮิสโตแกรม/ไทม์ไลน์ของกิจกรรมคอมมิต เพื่อให้เห็นประวัติการมีส่วนร่วมใน repository
      • รองรับแฟล็ก -l และ -f
  • ตัวเลือกเพิ่มเติมสำหรับการกรองคอมมิต
    • สามารถใช้ตัวเลือก --author และ --nauthor เพื่อระบุผู้เขียนที่ต้องการรวมหรือตัดออก
    • สามารถใช้ตัวเลือก --since และ --until เพื่อกรองคอมมิตก่อนหรือหลังวันที่ที่กำหนด
  • การแคช: เก็บข้อมูลแคชแยกตาม repository ไว้ใน XDG_CACHE_HOME หากต้องการปิดการแคช ให้ตั้งค่า GIT_WHO_DISABLE_CACHE=1
  • หากติดตั้งไบนารี git-who ไว้ใน path ก็สามารถรัน git who ได้ทันทีโดยไม่ต้องตั้งค่าเพิ่มเติม หากติดตั้งด้วยชื่ออื่นหรือต้องการกำหนดแบบชัดเจน สามารถเพิ่ม alias ในการตั้งค่า Git ได้
  • หากมีไฟล์ .mailmap อยู่ใน Git repository, git who จะเคารพการตั้งค่านั้นและนับคอมมิตของคนเดียวกันรวมกัน
  • เมตริก

    • จำนวนคอมมิต: แสดงจำนวนคอมมิตที่แก้ไขพาธนั้น
    • จำนวนไฟล์: แสดงจำนวนไฟล์ไม่ซ้ำที่ผู้เขียนคนนั้นแก้ไข
    • จำนวนบรรทัดที่เพิ่ม และ จำนวนบรรทัดที่ลบ: แสดงจำนวนบรรทัดที่ถูกเพิ่มหรือลบในพาธนั้น
  • ความแตกต่างจาก git blame

    • git blame จะระบุคอมมิตที่นำแต่ละบรรทัดของโค้ดใน working tree เข้ามา ในขณะที่
    • git who จะสำรวจบางส่วนของ commit log เพื่อสรุปการมีส่วนร่วม
    • ทั้งสองเครื่องมือทำงานคนละระดับกัน และให้ข้อมูลที่แตกต่างกัน

1 ความคิดเห็น

 
GN⁺ 2025-03-20
ความคิดเห็นบน Hacker News
  • สำหรับการวิเคราะห์ว่า "ใครเป็นคนเขียน vim" นั้น ขึ้นอยู่กับเวิร์กโฟลว์ อาจทำให้ดูเหมือนว่าผู้มีส่วนร่วมภายในมีผลงานมากกว่า

    • หากแพตช์หรือ pull request ถูกรีฟอร์แมตโดยผู้มีส่วนร่วมภายในก่อนถูกรวม งานเดียวกันอาจถูกนับซ้ำสองครั้ง หรือเครดิตอาจตกเป็นของคนที่รีฟอร์แมตเพียงคนเดียว
    • ผลลัพธ์ไม่ได้ผิด แต่ต้องระวังเมื่อจะตีความความหมายจากผลลัพธ์โดยไม่ได้ทบทวนกระบวนการมีส่วนร่วมก่อน
  • เครื่องมือนี้เจ๋งมาก ลองใช้สั้น ๆ ก่อนจบวัน

    • รายการสิ่งที่อยากได้ส่วนตัวมีดังนี้
      • สถิติแบบอิง blame การดูผลงานของ Bob กับ Alice ก็ดี แต่การแสดงเจ้าของที่แท้จริงของโมดูล/ไฟล์น่าจะมีประโยชน์มากกว่า
      • รองรับการรวม/ยกเว้นตามแพตเทิร์น ตัวอย่างเช่น ไม่อยากดูสถิติของไฟล์ json ที่ใช้ในการทดสอบหรือไฟล์ที่สร้างอัตโนมัติ
      • รองรับไฟล์ตั้งค่า น่าจะดีถ้ามีไฟล์แบบ TOML สำหรับเก็บการตั้งค่าที่ต้องการไว้ใน git repository
      • การแพ็กเกจที่ดีกว่านี้ ตัวอย่างเช่น Linux tarball ของ v0.6 มี "ขยะ" ที่เกี่ยวกับ Apple ปะปนอยู่ และ gnu tar ก็เตือนว่าไม่ตรงกับรูปแบบอาร์ไคฟ์
  • หลายคนเข้าใจ git blame ผิด มันไม่ใช่เรื่องของว่าใครเป็นคนทำ แต่เป็นเรื่องของว่าคอมมิตไหนคือสาเหตุ

  • สามารถเรียก git-who เป็น git who ได้ แค่ตั้ง alias ในการตั้งค่า Git แบบ global

    • แม้ไม่ตั้ง alias ก็ยังใช้ได้ โดยปกติแล้ว git whatever จะค้นหา git-whatever ใน path แล้วรันให้
  • เวอร์ชันบ้าน ๆ คือใช้นามแฝงว่า "nerdwars" เพื่อรัน git shortlog -ns --no-merges ซึ่งเป็นวิธีที่ดีในการดูว่าผู้มีส่วนร่วมหลักของโปรเจกต์คือใคร

  • Gitlab/Github ควรเพิ่มความสามารถในการส่งอีเมลหาเจ้าของล่าสุดของบรรทัดโค้ดที่ถูกแก้ไขโดยอัตโนมัติ เมื่อมีการส่ง merge request เข้ามา

  • เครื่องมือนี้ยอดเยี่ยม ใช้การทำบัญชีด้วย git-blame เพื่อติดตามปริมาณโค้ดที่ AI และมนุษย์เขียนในแต่ละรีลีสของแอป

    • "สคริปต์ blame" เริ่มช้าลงเมื่อ repository มีขนาดใหญ่ขึ้น เลยพยายามเพิ่มการแคช
    • สงสัยว่ามีแผนจะเพิ่มฟีเจอร์จำกัดสถิติตามแพตเทิร์นของไฟล์หรือไม่
  • tig เป็น TUI git frontend ที่ยอดเยี่ยม และมีซับคอมมานด์ tig blame ที่สวยมาก

  • สิ่งที่ขาดหายไปใน git ไม่ใช่จำนวนบรรทัดหรือจำนวนคอมมิตที่นักพัฒนาเขียน แต่เป็นเรื่องอย่าง

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