Chu kỳ phát hành ngắn hơn với DVCS


8

Việc lựa chọn sử dụng DVCS qua CVCS có thực sự làm cho chu kỳ phát hành ngắn hơn không? Nếu vậy, điều gì làm cho chu kỳ phát hành phần mềm ngắn hơn và các đối số cho điều này là gì?

  1. Liên quan đến yêu cầu kéo? Có phải nộp bản vá dễ dàng hơn đóng một vai trò ở đây?
  2. Liên quan đến yếu tố con người? Các nhóm dự án sử dụng CVCS có hành động bảo thủ hơn với lịch phát hành không?
  3. Còn yếu tố nào khác không?

Tôi đã chỉnh sửa một số "sự thật" giả định hơn và tải những câu hỏi mà một số người có thể thấy xúc phạm và mở lại câu hỏi. Nó hoàn toàn nên là một câu hỏi thiên vị và tập trung hơn trước nhưng nếu bạn không đồng ý thì hãy cho tôi biết.
maple_shaft

Nếu DVCS làm cho nhóm làm việc hiệu quả hơn, thì CÓ. Nếu DVCS không làm cho nhóm làm việc hiệu quả hơn, thì KHÔNG. Không có phép thuật trong DVCS, nó chỉ là một công cụ khác.
MrFox

Câu trả lời:


3

Điều gì làm cho chu kỳ phát hành phần mềm ngắn hơn với DVCS, so với CVCS?

Tôi không nghĩ có sự khác biệt giữa DVCS và CVCS ở đây, mà là sự khác biệt trong mô hình phân nhánh mà mọi người tuân thủ.

Từ những gì tôi đã thu thập ở đây và từ kinh nghiệm của tôi, những người sử dụng DVCS có xu hướng sử dụng nhiều chi nhánh hơn những người sử dụng CVCS. Và nếu bạn phát triển từng tính năng trong một nhánh của riêng mình, việc bắt đầu chuẩn bị một bản phát hành với tính năng mới trong đó sẽ dễ dàng hơn, nhưng không có tính năng Y, sự phát triển đã bắt đầu nhưng chưa sẵn sàng để phát hành.


Vâng, mô hình phân nhánh mà mọi người tuân thủ bị ảnh hưởng rất nhiều bởi những gì hệ thống kiểm soát phiên bản của họ làm cho dễ dàng. Và có một sự khác biệt trong việc này.
Jan Hudec

3
Thực tế là việc phân nhánh (và quan trọng hơn là sáp nhập ) dễ dàng hơn trong DVCS so với hầu hết CVCS không phải là một tài sản được phân phối hoặc tập trung. Hoàn toàn có thể có được việc sáp nhập dễ dàng trong CVCS như trong DVCS. Chỉ là những người dùng CVCS điển hình chưa bao giờ trải qua một sự hợp nhất dễ dàng, do đó họ không biết rằng điều đó thậm chí có thể, và do đó họ không yêu cầu các nhà cung cấp cho tính năng đó. DVCS OTOH sẽ vô dụng nếu không dễ dàng hợp nhất. Về cơ bản, đó là Nghịch lý Blub.
Jörg W Mittag

Mô hình phân nhánh trở nên thực sự khó khăn khi về mặt khái niệm khó phân tách các tính năng thành các nhánh và có rất nhiều giao diện chéo. Đây không phải là một vấn đề của việc thực hiện CVS. Khi điều này xảy ra, bạn cần một thân cây và thường xuyên cam kết không 'hợp nhất tốt hơn'. Một số điều thực sự cần phải được tập trung.
MrFox

3

Mọi người ở đây dường như đồng ý rằng các dự án sử dụng DVCS có chu kỳ phát hành ngắn hơn tất cả, nhưng vẫn không chắc chắn rằng việc áp dụng DVCS gây ra các chu kỳ ngắn hơn: Tương quan không phải là nguyên nhân!

VCS phân tán và chu kỳ phát hành ngắn là cả hai công nghệ tương đối mới. Các dự án nắm lấy một dự án có khả năng sẽ nắm lấy dự án khác, trong khi các nhóm thích thử và đúng, hoặc có quy trình làm việc lâu dài, sẽ bảo thủ hơn và gắn bó với CVCS và phát hành ít thường xuyên hơn.

Một câu hỏi tốt hơn để hỏi là: "Sử dụng DVCS theo cách nào tạo điều kiện thuận lợi cho mô hình chu kỳ phát hành ngắn?" Đây là những gì hầu hết các câu trả lời được giải quyết, như một vấn đề thực tế. Sử dụng DVCS không ngăn ai có chu kỳ phát hành dài; chấp nhận những cái ngắn là một lựa chọn và nó liên quan đến các phương pháp phát triển, mô hình phân nhánh, đánh giá mã, v.v .-- không chỉ là VCS.


1
+1 cho đoạn đầu tiên. DVCS là tiêu chuẩn trong số các công ty khởi nghiệp nhanh nhẹn thú vị mới, nhưng ít xâm nhập vào các dự án doanh nghiệp kiểu thác nước lớn. Mức độ phức tạp, môi trường và các loại sản phẩm thực sự không giống nhau.
MrFox

@suslik Có khá nhiều enterpries sử dụng BetKeeper hoặc Sun TeamWare từ khá lâu rồi.
johannes

2

Câu hỏi hay!

CVCS tin vào nguyên tắc chính là mọi thứ phải tiếp tục hợp nhất / đồng bộ hóa trở lại 'thân cây'. Ngoài ra, chúng tôi hy vọng rằng khi chúng tôi phát triển, thân cây phải là điểm ổn định nhất trước khi phát hành. Vì vậy, mọi người đưa công việc của họ vào bản sao làm việc, cập nhật và kiểm tra trước khi đăng ký. Hoặc cách khác, bạn làm việc trên các nhánh riêng tư / tính năng và sau đó hợp nhất các thay đổi trung kế khác, kiểm tra trước khi bạn tái hòa nhập.

Mẫu DVCS có thể khác nhau đáng kể. Bạn tiếp tục phân nhánh và rèn mình. Bạn có thể thử nghiệm, và cuối cùng hợp nhất các nhánh có ý nghĩa. Thỉnh thoảng bạn nghe thấy một số sửa chữa bảo mật phải ra ngoài ngay lập tức, vì vậy bạn muốn bản vá đó cũng ở trong chi nhánh của bạn, nhưng bạn không muốn nhiều thứ khác của thân cây! Vì vậy, theo mặc định, bạn tiếp tục làm việc trong không gian của mình, tiếp tục thực hiện và tích hợp mọi thứ - và đến lúc phát hành, tất cả bạn sẽ quyết định xem nên bỏ cái gì.

Xem điều này: http://nvie.com/posts/a-successful-git-branching-model/

Vì vậy, sự khác biệt cơ bản là đây: CVCS hỏi những gì mẹ nói với con nhỏ của họ - đừng đi quá xa đến mức tôi có thể tìm thấy bạn tức là - tiếp tục đồng bộ hóa với thân cây. DVCS hoạt động giả định rằng tất cả các công việc được thiết kế là độc lập trừ khi có nhu cầu hợp nhất rõ ràng (ví dụ: tạo một bản phát hành).

Bây giờ đến câu hỏi của bạn -

Giải thích trên thực sự nghe có vẻ trái ngược với những gì bạn quan sát / hỏi. Thách thức thực sự là, xác định những gì là ổn định! khi số lượng cơ sở người dùng rất lớn và trong khi mọi người tiếp tục đổ vào đồng bằng của họ - thì mỗi cơ sở có thể bị phá vỡ đối với các thay đổi song song khác cho đến khi mọi người ổn định tốt nhất cũng như toàn bộ tích hợp và phụ thuộc đều ổn. Vì vậy, khi bạn đang cố gắng phát hành, người ta cần thực sự làm mọi thứ rung chuyển, ngăn mọi người đổ các tính năng mới - xác định bất kỳ vấn đề tích hợp nào khi mọi thứ hợp nhất, v.v. Tất cả điều này, ngụ ý rằng CVCS luôn yêu cầu bạn thực hiện 'giải phóng' giữa quá trình phát triển!

Khi số lượng người đóng góp trở nên đông đảo, đến thời điểm 'giải phóng' trở nên khó khăn và ít hơn; và do đó CVCS thực sự sẽ buộc bạn thực hiện 'phát hành lễ hội sáng tạo' sau một ngày rất quan trọng.

Trong DVCS - bạn tiếp tục làm việc, thử nghiệm, thử nghiệm làm việc trên không gian của riêng bạn. Việc tạo và tích hợp phát hành là một hoạt động song song và nó cũng có thể đủ khả năng để thử và sửa lỗi bằng cách xem các bộ vá nào hoạt động cùng nhau và những gì sẽ không (do đó sẽ bị lấy hoặc bỏ khỏi các bản phát hành). Trong DVCS - bạn có thể tách rời sự phát triển cá nhân và sau đó thỉnh thoảng chỉ lén phát hành nếu điều đó có ý nghĩa.


'Giải phóng' là gì?
xếp hàng

Một khoảng dừng nhỏ trong quá trình phát triển cho đến khi thân cây được ổn định để tạo ra một bản phát hành! Điều này có thể hoặc không đáng kể tùy thuộc vào sự trưởng thành của các nhà phát triển.
Dipan Mehta

2
Tôi không mua đối số 'giải phóng'. Dường như với tôi đó là một vấn đề với việc phân nhánh của bạn chứ không phải CVCS như một khái niệm.
James

+1 @James. Nhóm của tôi đã được sử dụng để "giải phóng các lần phá vỡ" hoặc "đóng băng mã", khi chúng tôi sử dụng một phiên bản lỗi thời nghiêm trọng của PVCS. Chúng tôi đã chuyển sang TFS (chắc chắn không phải là DVCS) và sử dụng các nhánh, không "phá vỡ", để ổn định các bản phát hành. Mặc dù vậy, thật khó để phá vỡ những suy nghĩ về việc "đóng băng mã" cho mỗi bản phát hành.
DaveE

1

Điều gì làm cho chu kỳ phát hành phần mềm ngắn hơn với DVCS, so với CVCS?

Tôi đồng ý với Bart rằng lý do chính là mô hình phân nhánh được sử dụng, nhưng loại hệ thống kiểm soát phiên bản ảnh hưởng trực tiếp đến mô hình phân nhánh nào khả thi. Vì vậy, chúng tôi có hai câu hỏi phụ. Mô hình phân nhánh nào mà các hệ thống phân tán hỗ trợ tốt hơn và tại sao nó làm cho chu kỳ phát hành nhanh hơn?

Sự khác biệt cơ bản giữa kiểm soát phiên bản tập trung và phân tán là, nếu không có cơ quan trung ương, bạn không thể thực thi dòng thời gian tuyến tính. Vì vậy, để có thể kiểm soát phiên bản phân tán, các hệ thống này nhất thiết phải xác định lịch sử là biểu đồ chu kỳ có hướng, trong đó mỗi phiên bản chỉ đơn giản là có định danh duy nhất, một hoặc nhiều bản sửa đổi cha mẹ và có thể có nhiều bản sửa đổi con mà bạn có thể không biết, bởi vì bạn chưa đồng bộ hóa với hệ thống nơi chúng được tạo.

Nó chỉ ra rằng phương pháp này cho vay rất tốt để phân nhánh. Bạn không cần phải làm bất cứ điều gì để có được một chi nhánh, bạn chỉ cần luôn có một chi nhánh. Vì vậy, bạn có thể lặn thẳng để làm việc đầu tiên và quyết định khi nào và ở đâu để hợp nhất nó hoặc thậm chí là giữ nó ở đâu và dưới tên nào cho đến khi bạn biết liệu nó có thực sự đi theo cách bạn cần hay không.

Ngược lại, tất cả các hệ thống tập trung duy trì lịch sử như một tập hợp các nhánh với chuỗi sửa đổi tuyến tính. Vì vậy, bạn phải quyết định trước liệu bạn có cần một chi nhánh hay không, đặt tên cho nó và tạo ra nó một cách rõ ràng. Điều này khá đau ở mông khi bạn chưa biết ý tưởng đó có giá trị gì và bạn thường đơn giản là không biết điều đó trước khi bắt đầu lập trình. Bị ảnh hưởng bởi thực tế là trong hầu hết các hệ thống tập trung, tên chi nhánh là toàn cầu, quan trọng, thường tồn tại và không dễ dàng thay đổi, trong khi trong tất cả các hệ thống phân tán chính, chúng chỉ là các biệt danh cục bộ có thể thay đổi bất cứ lúc nào và được tái chế tự do. Và thực tế, tất cả các hoạt động phân nhánh và hợp nhất thường chậm hơn một chút trong CVCS.

Do đó, DVCS làm cho các chi nhánh dễ dàng hơn và do đó các nhóm sử dụng các chi nhánh DVCS mọi lúc trong khi các nhóm sử dụng CVCS sẽ tránh chúng hầu hết thời gian.

Bây giờ tại sao sử dụng các chi nhánh cho phép phát hành thường xuyên hơn? Vâng, mọi đội sẽ đánh giá thấp một nhiệm vụ ngay bây giờ và sau đó, thường là khi khó theo dõi lỗi xuất hiện. Các nhóm sử dụng các hệ thống tập trung thường thực hiện tất cả việc gỡ lỗi và hầu hết sự phát triển trên thân cây, vì các nhánh rất bất tiện. Vì vậy, họ không thể phát hành cho đến khi họ loại bỏ hầu hết các lỗi và họ phải xen kẽ các giai đoạn phát triển và gỡ lỗi.

Ngược lại trong các hệ thống phân tán, nơi tất cả các công việc được thực hiện trên các nhánh, chúng có thể được hợp nhất với nhau để kiểm tra, thử nghiệm, sửa lỗi và chỉ công việc vượt qua các thử nghiệm được hợp nhất riêng với thân cây. Kết quả là trong thân cây có rất ít lỗi và do đó có thể được phát hành thường xuyên hơn, thường là bất cứ khi nào một tính năng quan trọng hạ cánh.

Nó cũng giúp rằng bất cứ khi nào có sự thay đổi về các ưu tiên, công việc đang tiến hành có thể được tạm gác một cách tầm thường với phương pháp phân nhánh được sử dụng với các hệ thống phân tán. Trong hầu hết các dự án thực tế, những thay đổi trong các ưu tiên luôn luôn xảy ra.

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.