Những lợi thế và bất lợi của các cam kết và thẻ ký mã hóa trong Git là gì?


109

Vì vậy, một người ngang hàng đã xem xét công việc của tôi và anh ấy nói với tôi rằng tôi phải luôn ký cam kết và gắn thẻ bằng mật mã. Khi được hỏi tại sao, anh không biết giải thích cho tôi và nói "Đó chỉ là một việc nên làm".

Cố gắng tránh một kịch bản tinh tinh rõ ràng , tại sao tôi thực sự phải? Có thực sự rất nhiều lợi thế khác biệt và không có nhược điểm?

Những lý do thực tế nào sẽ khiến tôi muốn ký mỗi cam kết và thẻ tôi thực hiện?


3
Tôi cho rằng nó có một dấu vết giấy buộc cam kết với bạn. Tôi chưa bao giờ ký cam kết trước đó, với git hoặc bất kỳ hệ thống kiểm soát nguồn nào khác. Nếu đồng nghiệp của bạn tin rằng có nguy cơ lừa đảo, công ty của bạn có thể có vấn đề bảo mật lớn hơn.
James

@James: Đây không phải là công việc của công ty, nhưng tôi tham gia vào một số dự án nguồn mở và đóng.
Madara Uchiha

@James: "vấn đề bảo mật lớn hơn" --- như thế nào? Ký là một cách kỹ thuật để giải quyết chúng phải không?
zerkms

8
mikegerwitz.com/ con / git-horror-story.html là điểm khởi đầu cho trường hợp sử dụng của các cam kết và thẻ đã ký.

1
@James khi bạn cam kết sử dụng tài khoản SVN của mình, bạn ký cam kết. Khi bạn cam kết với cấu hình toàn cầu git của mình, bạn là cơ quan duy nhất xác nhận rằng bạn là tác giả.
Florian Margaine

Câu trả lời:


102

(Đ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.


5
Nó có thể là đủ (chỉ gắn thẻ cái cuối cùng), nhưng tại sao bạn không chỉ gắn thẻ mỗi cam kết?
hayd

3
Là một thằng khốn lười biếng không sử dụng thẻ, tôi đang cập nhật nhận xét trước đó. Trong cấu hình git trên máy trạm của tôi, tôi có commit.gpgsign = truevà tôi có thể xác định không có nhược điểm nào. Mặc dù nó có thể là ngớ ngẩn, nó dường như không quá đắt.
pnovotnak

3
Tôi sẽ tham gia @pnovotnak trên trang này, tại sao bạn không làm điều này? Ý tôi là tôi ký cam kết của mình và một nhà phát triển khác không cùng dự án, ai quan tâm? Nhưng nếu một hacker cố gắng đánh cắp danh tính của tôi, tôi có thể chỉ ra việc ký kết. Dường như với tôi rằng ký kết chỉ có lợi thế. Tôi đồng ý rằng chữ ký của bạn nhận được ít giá trị hơn, nhưng bạn đánh đổi điều này vì không phải suy nghĩ về nó. Về cơ bản nó bảo mật miễn phí.
Jappie Kerk

2
Ý kiến ​​cá nhân của tôi là ký mỗi cam kết là một điều tốt. Tôi có thể khá chắc chắn rằng các cam kết với chữ ký của tôi đến từ tôi, trong khi việc mạo danh một tác giả với vanilla git là chuyện nhỏ. Tôi thà gọi nó là xác nhận miễn phí, đó là người mà bạn cho là khác, không phải là bảo mật.
Berto

1
@JosiahYoder. Không, Github sẽ không từ chối vì một email không có trong dịch vụ của họ. Giả sử bạn đang lưu trữ mã của mình trên một dịch vụ khác (ví dụ: Bitbucket) và bạn muốn chuyển kho lưu trữ của mình sang nhà cung cấp khác. Nó sẽ ngăn người dùng chuyển một kho lưu trữ (Nhiều cam kết của nhiều người dùng) hoặc tạo gương, v.v ... Đây là một tính năng của DVCS.
Ricky Notaro-Garcia
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.