8 điểm bởi GN⁺ 2025-03-20 | 1 bình luận | Chia sẻ qua WhatsApp
  • git-who là một công cụ CLI để tìm người chịu trách nhiệm cho toàn bộ thành phần hoặc hệ thống con trong codebase
  • Khác với git blame, git-who hoạt động ở cấp cây thư mục tệp để xác định tác giả của mã
  • Công cụ cung cấp ba subcommand, và mỗi lệnh con mang đến một góc nhìn khác nhau về quyền tác giả trong kho Git
    • table

      • Mặc định, in ra một bảng tóm tắt đóng góp của mọi tác giả đã commit trong kho
      • Có thể chỉ định đường dẫn để chỉ lọc các commit liên quan đến tệp trong đường dẫn cụ thể đó
      • Có thể chỉ định tên nhánh, tên tag hoặc commit-ish để chỉ lọc các commit có thể truy cập từ một commit cụ thể
      • Có thể dùng các cờ -m, -c, -l, -f để sắp xếp bảng theo nhiều metric khác nhau
    • tree

      • In ra cây tệp, trong đó mỗi nút hiển thị tác giả đóng góp nhiều nhất tại đường dẫn tương ứng
      • Có thể dùng cờ -a để chú thích tất cả các tệp
      • Hỗ trợ các cờ -l, -f, -m, -c
    • hist

      • In ra histogram/dòng thời gian của hoạt động commit để thể hiện lịch sử đóng góp vào kho
      • Hỗ trợ các cờ -l-f.
  • Các tùy chọn bổ sung để lọc commit
    • Có thể chỉ định tác giả cần bao gồm hoặc loại trừ bằng các tùy chọn --author--nauthor
    • Có thể lọc commit trước hoặc sau một ngày cụ thể bằng các tùy chọn --since--until
  • Caching: lưu cache dữ liệu theo từng kho trong XDG_CACHE_HOME. Để tắt cache, đặt GIT_WHO_DISABLE_CACHE=1
  • Nếu cài binary git-who vào PATH, bạn có thể chạy git who mà không cần thiết lập thêm. Nếu cài với tên khác hoặc muốn cấu hình rõ ràng, có thể thêm alias vào cấu hình Git
  • Nếu tệp .mailmap tồn tại trong kho Git, git who sẽ tôn trọng nó và gộp các commit của cùng một người lại với nhau
  • Metric

    • Số commit: biểu thị số commit đã chỉnh sửa đường dẫn
    • Số tệp: biểu thị số tệp duy nhất mà tác giả đã chỉnh sửa
    • Số dòng thêm vàosố dòng bị xóa: biểu thị số dòng được thêm vào hoặc xóa khỏi đường dẫn
  • Khác biệt với git blame

    • git blame xác định commit đã đưa vào từng dòng dựa trên mã trong working tree, trong khi
    • git who duyệt qua một phần của commit log để tổng hợp đóng góp
    • Hai công cụ hoạt động ở các cấp độ khác nhau và cung cấp những loại thông tin khác nhau

1 bình luận

 
GN⁺ 2025-03-20
Ý kiến trên Hacker News
  • Liên quan đến phân tích "ai đã viết vim", tùy theo quy trình làm việc mà có thể trông như các cộng tác viên nội bộ đã đóng góp nhiều hơn

    • Nếu bản vá hoặc pull request được định dạng lại bởi cộng tác viên nội bộ trước khi hợp nhất, cùng một công việc có thể bị tính hai lần hoặc phần đóng góp chỉ được quy cho người đã định dạng lại
    • Kết quả không hẳn là sai, nhưng cần cẩn trọng khi rút ra ý nghĩa từ kết quả nếu chưa xem xét quá trình đóng góp
  • Công cụ này thực sự rất tuyệt. Tôi đã thử dùng nhanh trước khi kết thúc ngày làm việc

    • Danh sách mong muốn cá nhân của tôi như sau
      • Thống kê dựa trên blame. Xem đóng góp của Bob và Alice cũng hay, nhưng hiển thị người thực sự sở hữu mô-đun/tệp sẽ hữu ích hơn
      • Hỗ trợ bao gồm/loại trừ dựa trên mẫu. Ví dụ, tôi không muốn xem thống kê của các tệp json dùng cho kiểm thử hoặc các tệp được tạo tự động
      • Hỗ trợ tệp cấu hình. Sẽ rất tốt nếu có một tệp dựa trên TOML để lưu các thiết lập ưa thích trong kho git
      • Đóng gói tốt hơn. Ví dụ, tarball Linux của v0.6 có chứa "rác" liên quan đến Apple, và gnu tar cảnh báo về sự không khớp định dạng lưu trữ
  • Nhiều người đang hiểu sai về git blame. Nó không phải là ai đã làm, mà là commit nào là nguyên nhân

  • Có thể gọi git-who bằng git who. Chỉ cần thiết lập bí danh trong cấu hình Git toàn cục

    • Ngay cả không có bí danh thì vẫn hoạt động. Mặc định, git whatever sẽ tìm git-whatever trong đường dẫn rồi chạy nó
  • Với phiên bản cấu hình thấp, tôi dùng bí danh "nerdwars" để chạy "git shortlog -ns --no-merges". Đây là cách tốt để nắm được những người đóng góp chính của một dự án

  • Gitlab/Github nên bổ sung tính năng tự động gửi email cho người viết cuối cùng của các dòng mã đã sửa khi một merge request được gửi lên

  • Công cụ này rất xuất sắc. Tôi dùng kiểu hạch toán git-blame để theo dõi lượng mã do AI và con người viết trong mỗi bản phát hành của ứng dụng

    • "Script blame" đang chậm dần khi kích thước kho lưu trữ tăng lên. Tôi đã định thêm cơ chế cache
    • Tôi tò mò không biết có dự định thêm tính năng giới hạn thống kê dựa trên mẫu tệp hay không
  • tig là một frontend Git dạng TUI rất hay, và có subcommand tig blame rất đẹp

  • Thứ git còn thiếu không phải là số dòng hay số commit mà lập trình viên đã viết. Đúng hơn là những thứ như sau

    • Ai đã xóa dòng này
    • Ai là người sở hữu phương thức này
  • Một số người commit bằng hai địa chỉ email khác nhau. Ví dụ, họ dùng một email trên máy ở nhà và một email khác trên máy công ty. Sẽ rất tốt nếu có thể định nghĩa chúng là cùng một người