(Điều này phần lớn dựa trên Câu chuyện kinh dị Git: Tính toàn vẹn của kho lưu trữ với các cam kết đã ký Đã đọc rất tốt và nhiều thông tin hơn tôi có thể đưa ra câu trả lời.)
Có một số cách mà kho lưu trữ git có thể bị xâm phạm (đây không phải là một lỗ hổng bảo mật, chỉ là một thực tế của cuộc sống mà người ta không nên tránh sử dụng git vì điều này). Ví dụ, ai đó có thể đã đẩy vào kho lưu trữ của bạn tự xưng là bạn. Hoặc về vấn đề đó, ai đó có thể đã bị đẩy đến kho lưu trữ của người khác tự xưng là bạn (ai đó có thể đẩy vào kho lưu trữ của chính họ cũng tự xưng là bạn). Đây chỉ là một phần của cuộc sống trong một DVCS.
Chỉ là một ví dụ:
$ git config --global user.name 'Madara Uchiha'
$ git config --global user.email muchiha@example.com
Ở đó, tôi đã thay đổi cấu hình git của mình để giả vờ là bạn. Và bây giờ tôi có thể cam kết và để những cam kết đó bằng cách nào đó tiến vào công trình sản xuất, và có vẻ như bạn đã thực hiện nó.
Với việc ký xác nhận (và thẻ), người ta có thể chứng minh rằng các cam kết và thẻ nhất định là từ bạn (và những thứ không được ký không nên đưa nó vào bản dựng sản xuất). Đó thực sự là chìa khóa cho tất cả mọi người bằng cách ký cam kết bạn đã nói đó là công việc của bạn.
Khía cạnh "công việc của bạn" đặc biệt quan trọng trong nhân linux (và do đó là git) đôi khi gặp phải các vụ kiện bản quyền. Bằng cách ký cam kết, bạn nói rằng bạn có quyền đối với phần mềm mà nó theo dõi nguồn gốc. Có thể là bạn không có quyền truy cập vào nguồn đang được tuyên bố là bản quyền và khiếu nại là không có căn cứ. Có thể là công ty đã quên rằng bạn đã làm việc cho họ vài năm trước và dưới sự chỉ đạo của họ đã thêm tài liệu vào kernel, hoặc bất cứ điều gì.
Có một số tranh luận về việc liệu mọi cam kết sẽ được ký kết. Từ GPG ký cho cam kết git? (trở lại năm '09), Linus đã viết:
Ký mỗi cam kết là hoàn toàn ngu ngốc. Nó chỉ có nghĩa là bạn tự động hóa nó, và bạn làm cho chữ ký có giá trị ít hơn. Nó cũng không thêm bất kỳ giá trị thực nào, vì cách thức hoạt động của chuỗi DAG của SHA1, bạn chỉ cần một chữ ký để làm cho tất cả các cam kết có thể đạt được từ đó. Vì vậy, ký mỗi cam kết chỉ đơn giản là thiếu điểm.
Nhiều hơn về những suy nghĩ về việc đăng nhập git cũng có thể được đọc ở đó.
Điều đó nói rằng, nó đã đi vào git anyways.
Dường như có một sự đồng thuận đa số rằng việc ký cam kết là không cần thiết, nhưng ký thẻ là rất tốt. Bài đăng trên blog được liên kết ở trên cùng cho thấy rằng mọi người nên ký mọi thứ. Như tôi đã nói, có một số tranh luận về việc mọi cam kết có cần thiết hay không.
Chìa khóa cho cuộc tranh luận "ký mỗi cam kết" có thể liên quan đến quy trình công việc bạn sử dụng. Hầu hết mọi người thực hiện một loạt các cam kết trong repo địa phương của họ, và sau đó đẩy tập hợp đó. Nó là đủ để gắn thẻ bộ sưu tập cuối cùng (giả sử, bạn chắc chắn rằng tất cả các thay đổi là chính xác). Nếu bạn đang làm việc trong một môi trường có nhiều cam kết đơn lẻ đang di chuyển, thì sự khác biệt giữa thẻ và cam kết sẽ trở nên ít khác biệt hơn và các cam kết ký có thể trở nên hữu ích hơn.