Trong thế giới phát triển phần mềm, việc hiểu ai đã viết đoạn mã nào là rất quan trọng cho sự hợp tác, gỡ lỗi và chia sẻ kiến thức. Trong khi lệnh blame
tích hợp sẵn của Git từ lâu đã là công cụ phổ biến cho mục đích này, một tiện ích dòng lệnh mã nguồn mở mới có tên git-who
đang thu hút sự chú ý nhờ cung cấp những hiểu biết sâu sắc hơn về quyền sở hữu mã và mô hình đóng góp.
Hiểu về Git Blame và Git Who
Git blame thường bị nhiều nhà phát triển hiểu sai. Như một người bình luận đã chỉ ra, Git blaming thực sự bị nhiều người hiểu lầm; nó KHÔNG phải về ai đã làm điều đó, mà là về commit nào chịu trách nhiệm -- đó là khác biệt. Trong khi git blame hiển thị commit nào đã sửa đổi lần cuối mỗi dòng mã, git-who áp dụng một phương pháp khác bằng cách phân tích mô hình đóng góp trên toàn bộ tệp và thư mục, cung cấp cái nhìn toàn diện hơn về quyền sở hữu mã.
Sự khác biệt cơ bản là git blame tập trung vào việc gán trách nhiệm từng dòng, trong khi git-who giúp trả lời những câu hỏi rộng hơn về ai đã đóng góp đáng kể nhất cho các phần cụ thể của codebase theo thời gian. Sự phân biệt này trở nên đặc biệt quan trọng trong các codebase lớn với nhiều người đóng góp, nơi việc hiểu bức tranh tổng thể về quyền sở hữu có thể là một thách thức.
Vấn đề với Git Blame truyền thống
Git blame truyền thống có những hạn chế mà git-who cố gắng giải quyết. Chẳng hạn, khi các nhà phát triển thực hiện việc tái cấu trúc lớn, định dạng lại mã hoặc di chuyển tệp, git blame sẽ gán tất cả các dòng đó cho người thực hiện những thay đổi đó, ngay cả khi họ không viết mã ban đầu.
Một trong những điều gây thất vọng hơn về 'git blame' xuất hiện khi dọn dẹp một codebase cũ: Trong công việc hiện tại của tôi, tôi phải di chuyển nhiều tệp, kết hợp các repo, định dạng lại mã, v.v. 'git blame' và các công cụ tương tự thường luôn hiển thị tên tôi, mặc dù tôi không viết mã đó.
Vấn đề này đặc biệt nghiêm trọng trong các tổ chức lớn, nơi việc hiểu đúng quyền sở hữu mã là điều cần thiết cho việc chia sẻ kiến thức và bảo trì. Git-who cung cấp các góc nhìn khác nhau về mô hình đóng góp có thể giúp khắc phục những hạn chế này.
Tính năng và Khả năng
Git-who cung cấp một số lệnh phụ cung cấp các góc nhìn khác nhau về quyền sở hữu mã. Lệnh phụ log
tóm tắt cấu trúc tệp và commit sâu sắc hơn so với các công cụ git tiêu chuẩn. Lệnh phụ user
giúp kiểm tra các đóng góp cho các đường dẫn cụ thể trong cây tệp, trong khi lệnh phụ tag
xác định tác giả dựa trên số lượng tệp đã chỉnh sửa.
Một tính năng đặc biệt hữu ích là khả năng trực quan hóa dòng thời gian đóng góp với lệnh phụ bug
, lệnh này tạo ra cơ sở dữ liệu các nhiệm vụ sắp xếp dòng thời gian đóng góp dự án. Điều này có thể vô giá để hiểu cách một dự án đã phát triển theo thời gian và ai đã chịu trách nhiệm cho các thành phần khác nhau trong các giai đoạn khác nhau.
Công cụ này cũng hỗ trợ lọc theo tác giả, khung thời gian và các tham số khác, làm cho nó linh hoạt cho nhiều trường hợp sử dụng. Ngoài ra, nó lưu trữ dữ liệu trên cơ sở mỗi kho lưu trữ, cải thiện hiệu suất cho các truy vấn lặp lại.
Các tùy chọn cài đặt cho git-who:
- Các tệp nhị phân biên dịch sẵn: Có sẵn trong phần Releases
- Trình quản lý gói:
- Homebrew:
brew install onkarshirge/tap/git-who
- Homebrew:
- Từ mã nguồn:
- Yêu cầu Go, Make, và bộ công cụ Go
go install github.com/sinclairtarget/git-who@latest
- Docker:
- Xây dựng:
docker build -t git-who .
- Chạy:
docker run -it --rm -v "$(pwd):$(pwd)" -w "$(pwd)" onkarshirge/git-who
- Xây dựng:
Các lệnh phụ chính:
log
: Tóm tắt cấu trúc tệp/commituser
: Hiển thị đóng góp vào các đường dẫn cây tệpbug
: Tạo dòng thời gian các đóng góptag
: Gắn thẻ tác giả dựa trên số lượng tệp đã chỉnh sửa
Thiết lập bí danh Git:
[alias]
who = "!f(){ git-who \"$@\"; }; f"
wlog = "!f(){ git-who log \"$@\"; }; f"
![]() |
---|
Một ảnh chụp màn hình của một repository GitHub minh họa cấu trúc mã nguồn và lịch sử người đóng góp liên quan đến khả năng của git-who |
Phản hồi và Đề xuất từ Cộng đồng
Cộng đồng nhà phát triển đã phản hồi tích cực về git-who, với nhiều người dùng đánh giá cao tốc độ và những hiểu biết sâu sắc của nó. Một người dùng báo cáo rằng đối với một codebase Rails khoảng 18 năm tuổi với 1.695 người commit và hơn 220.000 lần commit, git-who hoàn thành phân tích trong chưa đầy 3 giây.
Người dùng cũng đã đề xuất các cải tiến tiềm năng, chẳng hạn như thêm thống kê dựa trên blame để hiển thị chủ sở hữu thực tế của các module hoặc tệp, hỗ trợ cho các bao gồm/loại trừ dựa trên mẫu (tương tự chức năng .gitignore) và tệp cấu hình để lưu trữ cài đặt ưa thích.
Một số nhà phát triển đã lưu ý rằng git-who bổ sung cho các công cụ hiện có như git shortlog -sn
, cung cấp số lượng commit đơn giản theo người đóng góp. Tuy nhiên, như một người bình luận đã chỉ ra, Số lượng commit không phải là một chỉ số rất tốt để đo lường đóng góp. Nó chỉ hoạt động khi có một phong cách commit đã thống nhất và mọi người đều tuân theo điều đó.
Tích hợp với Quy trình làm việc hiện tại
Git-who có thể dễ dàng tích hợp vào quy trình làm việc Git hiện có. Công cụ có thể được cài đặt thông qua các trình quản lý gói như Homebrew hoặc biên dịch từ mã nguồn. Người dùng có thể thiết lập các bí danh Git để làm cho nó dễ sử dụng hơn, cho phép các lệnh như git who
hoặc git wlog
thay vì cú pháp git-who
đầy đủ.
Đối với những người làm việc trong môi trường container hóa, git-who có thể được chạy như một container Docker mà không cần cài đặt trực tiếp trên máy chủ. Tính linh hoạt này làm cho nó dễ tiếp cận với các nhà phát triển trong các môi trường khác nhau và với các sở thích quy trình làm việc khác nhau.
Khi các nhóm phát triển tiếp tục tìm kiếm cách tốt hơn để hiểu quyền sở hữu mã và mô hình đóng góp, các công cụ như git-who đại diện cho sự tiến hóa trong cách chúng ta suy nghĩ và phân tích quyền tác giả mã. Bằng cách cung cấp những hiểu biết sâu sắc hơn ngoài việc đổ lỗi đơn giản từng dòng, git-who giúp các nhóm hiểu rõ hơn về codebase của họ và hợp tác hiệu quả hơn.
Tham khảo: git-who