2008-09-26 27 views
13

Dựa trên một vài bài đăng tôi đã đọc về kiểm soát phiên bản, có vẻ như mọi người nghĩ rằng việc khóa bi quan trong một hệ thống kiểm soát phiên bản là một điều xấu. Tại sao? Tôi hiểu rằng nó ngăn cản một nhà phát triển gửi một thay đổi trong khi một nhà phát triển khác có kiểm tra tệp, nhưng vậy thì sao? Nếu các tệp mã của bạn quá lớn đến mức bạn liên tục có nhiều người cùng làm việc với họ cùng một lúc, tôi gửi rằng bạn nên tổ chức lại mã của mình. Chia nó thành các đơn vị chức năng nhỏ hơn.Tại sao tránh khóa bi quan trong hệ thống điều khiển phiên bản?

Việc tích hợp các thay đổi mã đồng thời là một quá trình tẻ nhạt và dễ bị lỗi ngay cả với các công cụ mà hệ thống kiểm soát phiên bản tốt cung cấp để giúp dễ dàng hơn. Tôi nghĩ rằng nó nên tránh nếu có thể. Vậy tại sao khóa bi quan lại nản lòng?

Trả lời

7

Tùy thuộc vào dự án và nhóm của bạn nói chung. Khóa bi quan là tốt bởi vì nó rất dễ hiểu - một dev tại một thời điểm, và không cần sáp nhập!

Tuy nhiên, điều xấu về chính xác là - mỗi lần một nhà phát triển. Tôi có tình huống ngay bây giờ, nơi một đồng nghiệp đã đến chỗ, và trước khi anh ta rời đi, anh ta kiểm tra mọi thứ để nếu anh ta sửa chữa bất kỳ lỗi nào, anh ấy có thể quay lại và kiểm tra tất cả những thay đổi của anh ấy .... tuyệt vời cho anh ấy , tệ hại cho tôi và phần còn lại của đội ngũ dev tại căn cứ.

Nếu bạn có thể nắm bắt được sự bi quan trong nhóm của mình thì thật tốt khi sử dụng nó, thực sự, lý do lớn nhất mà mọi người ghét là vì thực hành mặc định của Visual SourceSafe. Nếu bạn không tự tin trong việc hợp nhất nhiều thay đổi, thì bạn có một lý do khác để sử dụng nó - nếu bạn đã từng sử dụng khóa SCM lạc quan và tăng cường hợp nhất, bạn sẽ biết mức độ khó khôi phục.

Nếu bạn có thể xử lý việc sáp nhập, thì khóa lạc quan tốt hơn và tôi khuyên bạn nên sử dụng nó, nhưng bạn không phải đưa thẻ geek của mình vào nếu bạn không muốn sử dụng.

1

Nhà phát triển phần mềm luôn là người lạc quan - chỉ cần nhìn vào các vòng trượt ước tính của họ!

Trong thực tế, chúng tôi thấy xung đột là rất hiếm và lợi ích của việc không phải lo lắng về việc khóa vượt quá bước giải quyết xung đột không thường xuyên.

+1

"Nhà phát triển phần mềm luôn là người lạc quan - chỉ cần nhìn vào các vòng trượt ước tính của họ!" - Yêu nó!! – tjjjohnson

14
  1. Đi chơi với nguồn An toàn và để nhà phát triển rời đi trong một kỳ nghỉ hai tuần. Thêm vào đó các quản trị viên VSS không ở xung quanh. Bây giờ bạn có bản sửa lỗi được đăng nhưng không thể vì nhà phát triển
  2. Nếu bạn có nhiều tính năng và/hoặc sửa lỗi đang được thực hiện. Không có vấn đề làm thế nào nhỏ mã của bạn bị hỏng, bạn vẫn sẽ có tranh chấp cho một tập tin trung tâm.
+1

Tôi hoàn toàn đồng ý, Scott. – itsmatt

+0

Tôi đồng ý, nhưng tại sao lại tham chiếu SourceSafe? Chúng tôi đã sử dụng nó trong nhiều năm trong chế độ kiểm tra đồng thời - không có vấn đề gì. (Tôi chưa bao giờ thực sự hiểu hết sự ghét đối với VSS. Tôi đoán chúng tôi đã may mắn). –

+1

@Steve: Có, bạn có thể làm cho VSS hoạt động. Bạn có thể làm cho các tệp zip hoạt động quá, nếu bạn đủ năng lực để làm điều đó. VSS kết hợp kết hợp crappy, cam kết phi nguyên tử, và một hệ thống thay đổi thiết lập bao gồm các thẻ và không có gì khác.Không phải chỉ là cưa xích, nhưng đủ nguy hiểm như nhau. – Shog9

2

Khóa bi quan là (trải nghiệm cá nhân) theo cách cộng tác. Đôi khi nó dễ dàng được thay thế bởi giao tiếp nhóm tốt. Chỉ bằng cách nói "Này, tôi sẽ làm việc trên vài tập tin này trong một thời gian".

Tôi đã làm việc theo nhóm từ 2 đến 6 người mà không cần khóa và chúng tôi chưa bao giờ gặp sự cố, ngoài một số hợp nhất thông thường và cần thiết.

Tôi cũng đã từng làm việc một lần với khóa trong dự án được lưu trữ Visual SourceSafe. Đó là IMHO phản tác dụng.

4
  • Bạn không luôn luôn có tùy chọn để nghỉ tập tin ngoài
    • Config file
    • XML file
  • file Thậm chí tương đối nhỏ vẫn có thể chứa các bộ phận riêng biệt mà nhiều hơn một nhà phát triển cần quyền truy cập vào
    • Thư viện
    • Utilities
  • Sáp nhập Công cụ thông minh hơn nhiều so với họ đã từng
    • Mâu thuẫn khá hiếm
  • Giảm sự chậm trễ do các nhà phát triển có file "vô tình" kiểm tra ra
3

Nếu nhà phát triển không thể xử lý việc hợp nhất và sửa các xung đột, anh ta phải được giáo dục lại.Nó là phổ biến cho ngay cả các tập tin nhỏ để có được xung đột, ví dụ với JSPs một người (nhà phát triển web) có thể thay đổi mã bố trí, và người khác có thể thay đổi API cho mô hình mà JSP đang sử dụng.

6
  1. Bob cần phải chỉnh sửa FooBar.java
  2. John có nó kiểm tra ra để chỉnh sửa
  3. Bob chỉnh sửa bản sao cục bộ của mình anyway và lưu nó như FooBar.java.bak
  4. Khi John kiểm tra trong mình, Bob kiểm tra nó ra
  5. Bob bản FooBar.java.bak qua nó và kiểm tra nó trong
  6. John được cho reimplement tính năng của ông

Tôi đã nhìn thấy nó xảy ra thời gian và thời gian một lần nữa. Các nhà phát triển làm việc này vì quá trình này là khó chịu:

  1. Bob cần phải chỉnh sửa FooBar.java
  2. John có nó kiểm tra ra để chỉnh sửa
  3. Bob phải đợi twiddling thumbs mình cho đến khi John được thực hiện

Khóa bi quan cảm thấy như giờ nghiệp dư, xin lỗi.

+0

Bob thực sự là một kẻ giật giật vì không hợp nhất khi anh ta sử dụng một mô hình sandbox. John là một giả thực sự không chỉ lấy lại phiên bản cũ của anh ta từ kiểm soát nguồn và hợp nhất những thay đổi của anh ta với Bob. – indiv

1

nếu các tập tin mã của bạn rất lớn mà bạn thường xuyên có nhiều hơn một người làm việc trên chúng cùng lúc

Nếu đây là trường hợp đó là thời gian cho 'con người' phụ trách và điều phối bất kỳ thay đổi nào. Trong trường hợp lý tưởng và nếu quản lý dự án của bạn tốt, bạn hiếm khi đạt được thời gian mà bạn đang cố gắng thay đổi tệp bị khóa vì ai đó sẽ phối hợp mọi thứ để điều này không thực tế xảy ra.

Nói cách khác, bạn sẽ biết 'Bob' đang thực hiện một bộ thay đổi lớn trong các thành phần X/Y/Z, nếu bạn sửa lỗi trong thành phần X, bạn sẽ biết nói chuyện với Bob trước khi cố gắng gửi thay đổi của bạn.

Như tôi nói điều này lý tưởng;)

1

Khóa bi quan là một ý tưởng hay nếu xung đột nghiêm trọng có thể xảy ra. Đối với hầu hết các chương trình bạn sẽ không thấy bất kỳ xung đột nghiêm trọng nào, do đó, việc bi quan khóa là khá vô nghĩa. Ngoại lệ cho điều này sẽ là nếu bạn là:

  • Làm việc trên tệp nhị phân mà bạn không thể hợp nhất - nội dung nghệ thuật (mô hình, kết cấu, v.v) là một ví dụ hay.
  • Làm việc với những người dùng không có kỹ thuật không biết cách hợp nhất và không muốn học (chủ yếu là nghệ sĩ, nhưng một số nhà văn kỹ thuật cũng sẽ thích hợp với điều này).
  • Làm việc trên các tệp rất lớn mà không thể dễ dàng được hợp nhất hoặc chia nhỏ thành các tệp nhỏ hơn do mức độ phức tạp cao (không bao giờ nhìn thấy tình huống như bàn tay đầu tiên đó, nhưng tôi chắc chắn là có thể).

Nếu không ...

3

Về trường hợp với Bob và John, hệ thống hợp tác xã như svn không ngăn chặn kịch bản này nhiều hơn bất kỳ một hệ thống khóa không. Tôi có thể 'cập nhật' FooBar.java, đáp ứng svn rằng tôi có phiên bản mới nhất, sau đó xóa tệp đó cục bộ và ghi đè lên bằng bản sao cá nhân của riêng tôi mà không cần quan tâm đến phiên bản cơ sở và kiểm tra những thay đổi của người khác. Không có hệ thống, khóa hay không, ngăn chặn điều này, vì vậy tôi không thấy điểm thậm chí đưa nó vào cuộc tranh luận.

Vấn đề thực sự là quyết định những gì dư của bạn giữa

khả năng sai lầm merge vs bất tiện gây ra bởi những người khóa file

Quan điểm cho rằng hoặc là một khóa hoặc hệ thống không khóa là "vượt trội "là vô nghĩa.

Tôi đã sử dụng VSS, ở chế độ khóa toàn bộ mặc định của nó, với 6 nhà phát triển và nó hoạt động như một giấc mơ. Thỉnh thoảng, ai đó sẽ quên để giải phóng một khóa và chúng tôi sẽ phải săn chúng xuống hoặc phá vỡ khóa bằng tay và hợp nhất tay khi họ quay trở lại, nhưng điều này rất tối thiểu. Tôi đã nhìn thấy svn vít lên tự động hợp nhất nhiều hơn một lần, như vậy mà tôi không thực sự tin tưởng nó. Nó không phải lúc nào cũng gắn cờ một 'xung đột' khi hai người đã thay đổi cùng một tệp theo cách không thể tự động hợp nhất với nhau.
Ngược lại, tôi thấy mọi người mất kiên nhẫn với ổ khóa của VSS, chỉnh sửa các bản sao của riêng họ, và tò mò kiểm tra chúng ở phía trên mã của người khác, và tôi đã nhìn thấy svn một cách thủ công khi tôi vô tình thử để kiểm tra một cái gì đó trong đó đã được thay đổi bởi người khác kể từ lần cuối tôi kiểm tra nó ra.

Quan điểm của tôi là, đây không phải là một cuộc tranh luận hợp lý. Sự thành công của một trong hai hệ thống sẽ giảm xuống về cách bạn quản lý các điểm xung đột khi chúng xảy ra, không cho dù một hệ thống hoặc hệ thống kia tốt hơn.

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