2010-03-11 27 views
6

Tôi muốn xây dựng một con đường đáng tin cậy để phát triển phần mềm. Điều này có nghĩa là mọi thay đổi về mã phải được ký bởi tác giả và một người đánh giá, trước khi được chấp nhận. Những chữ ký này cho các thay đổi phải được xác minh tại thời điểm phát hành, hoặc phải có một số các phương tiện khác để đảm bảo rằng kho lưu trữ không thể bị giả mạo hoặc thay đổi bổ sung.Đường dẫn phát triển đáng tin cậy trong git có chữ ký

Hệ thống kiểm soát phiên bản mà tôi mong muốn sử dụng cho mục đích này là git, nhưng các tùy chọn khác cũng được chấp nhận. Đăng nhập có thể thông qua chứng chỉ GnuPG hoặc SSL.

Các công việc tôi đang nghĩ đến sẽ là khoảng:

  1. thân xác hiện hành được phân nhánh
  2. Những thay đổi được phát triển tại các chi nhánh của một hoặc nhiều nhà phát triển
  3. Một hoặc nhiều các nhà phát triển ký thay đổi do chi nhánh
  4. Đánh giá của người đánh giá và kiểm tra các thay đổi
  5. Người kiểm tra ký các thay đổi của chi nhánh
  6. Chi nhánh là "sáp nhập" vào thân xác hiện tại

Ghép không phải là hết sức rõ ràng như rằng thay đổi chưa được xem xét sẽ cần phải được unmergeable để thân cây - chỉ rằng trước khi một thông cáo, cần phải có một cách kiểm tra xem có bất kỳ thay đổi nào chưa được xem xét trong thân cây (chưa ký). Và nói chung, giả mạo không cần phải được ngăn chặn, chỉ phát hiện.

Tôi muốn có hướng dẫn ngắn về cách thiết lập và cách thực hiện từng thao tác. Một khi tôi nhận được một số gợi ý, tôi có thể tìm ra các chi tiết cụ thể bản thân mình.

Ngoài ra, tôi đã biết về 'git tag -s' về mặt kỹ thuật, nhưng tôi không chắc chắn cách áp dụng nó cho vấn đề cụ thể này.

+0

Hiện chưa có bất kỳ câu trả lời cụ thể nào cho tất cả câu chuyện, vì vậy tôi để nó mở. Tôi đang cố gắng một số khả năng bản thân mình và nếu tôi đưa ra một cái cụ thể, tôi sẽ đăng câu trả lời ở đây. – Nakedible

Trả lời

2

Thay đổi sẽ không được ký cho đến khi bạn gắn thẻ. Bất cứ điều gì trước thời điểm đó có thể được xác minh bởi tác giả hoặc bởi một cơ chế ngoài băng khác, nhưng không phải từ bên trong git.

git có thể xác minh rằng di sản của thay đổi là chính xác nhưng chỉ thẻ đã ký mới có thể xác minh thay đổi là chính xác.

Đối với quy trình làm việc của bạn, bạn có thể thấy mình gắn thẻ rất nhiều.

+0

Có vẻ như tôi sẽ phải tự mình tìm ra giải pháp cụ thể. – Nakedible

+1

@Nakedible Lưu ý rằng kể từ [Git 1.7.9] (https://git.kernel.org/?p=git/git.git;a=blob_plain;f=Documentation/RelNotes/1.7.9.txt;hb = HEAD) các cam kết riêng lẻ có thể được ký với -S. Và chữ ký có thể được xem với tùy chọn "--show-signature" để "git log". –

+0

Cảm ơn bạn đã cung cấp thông tin. Tuy nhiên, có vẻ như -S chỉ hoạt động khi thực hiện cam kết và các cam kết không thể được ký sau này. Tôi hy vọng sẽ sai về điều này, mặc dù. – Nakedible

0

Git là một ứng cử viên tốt vì:

  • từng cam kết đã đăng
  • phím SHA1 cho từng cam kết là đủ để đảm bảo các tất cả repo chưa được sửa đổi
  • thẻ git -s có thể được sử dụng để ký cam kết mà ai đó không thực hiện (git tag -m is more explicit)

Vì vậy:

  1. thân xác hiện hành được phân nhánh
    git checkout -b tag_for_last_verified_trunk_content test # branch test
  2. Những thay đổi được phát triển tại các chi nhánh của một hoặc nhiều nhà phát triển
    [work...] git commit -s -m "dev1 comment" ...
  3. Một hoặc nhiều các nhà phát triển ký thay đổi do các chi nhánh

    Đã thực hiện xong với các cam kết của họ, bằng cách thêm dòng Đã ký ở cuối thông báo cam kết: xem trang này cho explanation on the signed-off quy trình.

    Signed-off-by: user name
  4. Một nhà phê bình đánh giá và kiểm tra những thay đổi

     git tag -m "testing" testing # refer to current commit, 
               allowing dev to go on with further changes
  5. Reviewer ký thay đổi do các chi nhánh
    git tag -m "tested" tested testing # put a tag on the same SHA1 than 
                the "testing" tag
  6. Chi nhánh là "sáp nhập" vào thân xác hiện tại
    git checkout trunk & git merge tested

Cyryl Plotnicki-Chudyk đề cập đến in the comments rằng, kể từ git 1.7.9 (tháng 1 năm 2012, gần 2 năm sau câu trả lời này), bạn có thể GPG ký bất kỳ cam kết nào bạn muốn, sử dụng git commit -S.
(Xem commit ba3c69a9 tinh gần đây hơn trong commit df45cb3)

+0

Tôi không hiểu lời giải thích của bạn. Mỗi cam kết đã được ký kết như thế nào? Chắc chắn, cam kết chứa SHA1 cho tất cả các repo, nhưng không có gì nói cam kết được thực hiện bởi tác giả được đưa ra trong cam kết. Tôi không biết bất kỳ chữ ký số nào được thực hiện cho cam kết? – Nakedible

+0

@Nakedible: xin lỗi, tôi đã quên tùy chọn '-s' trên cam kết. Hãy nhớ rằng đây là một quá trình đăng nhập có trọng lượng rất nhẹ (xem liên kết tôi đã thêm vào câu trả lời của tôi, không có "chữ ký số" tham gia vào thời điểm này, không giống như 'tag -s') – VonC

+0

Hey, thực sự vì git v1.7.9 để GPG ký bất kỳ cam kết nào bạn muốn. sử dụng 'git commit -S' để làm điều đó –

0

Bạn có thể đăng thẻ của bạn với khóa GPG của bạn với tùy chọn -s trong thẻ git tag -s v0.1.0:

-s

Make a GPG-signed tag, using the default e-mail address's key 

Nhưng bạn không thể ký cam kết.

+0

Như tôi đã nói trong câu hỏi ban đầu của mình, tôi đã biết tùy chọn -s trong thẻ git, nhưng điều đó không giải quyết được toàn bộ vấn đề. – Nakedible

+0

xin lỗi vì đã lặp lại – shingara

+1

thêm nhận xét này cũng ở đây; thực sự từ git v1.7.9, có thể GPG-ký bất kỳ cam kết nào bạn muốn. sử dụng 'git commit -S' để làm điều đó –

Các vấn đề liên quan