Bạn có nên bận tâm với các chi nhánh SVN nếu bạn chỉ có một?


10

Nếu chúng ta chỉ làm việc với một nhánh trong Subversion, chúng ta có nên bận tâm không? Chúng ta không thể làm việc trên thân cây để tăng tốc mọi thứ sao?

Đây là cách chúng tôi phát triển với Subversion:

  • Có một thân cây
  • Chúng tôi tạo ra một nhánh phát triển mới
  • Chúng tôi phát triển một tính năng mới trên chi nhánh đó
  • Khi tính năng được thực hiện, nó được hợp nhất trong thân cây, nhánh bị loại bỏ và một nhánh phát triển mới được tạo từ thân cây

Khi chúng tôi muốn phát hành để sản xuất, chúng tôi tạo một thẻ từ thân cây. Sửa lỗi được thực hiện trên một nhánh từ thẻ đó. Lỗi này sau đó được hợp nhất trong thân cây.

Đây là lý do tại sao chúng tôi tạo một nhánh phát triển mới sau khi một tính năng được thực hiện. Bằng cách này, lỗi được bao gồm đủ sớm trong mã mới của chúng tôi.

Dưới đây là một sơ đồ cần làm rõ:

Chiến lược lật đổ của chúng tôi

Bây giờ, có một cảm giác đây không phải là cách làm việc hiệu quả nhất. Chúng tôi xây dựng tại địa phương trước khi chúng tôi cam kết, mất khoảng 5-10 phút. Bạn có thể hiểu rằng đây là một thời gian chờ đợi khá lâu.

Ý tưởng của một nhánh phát triển là thân cây luôn sẵn sàng phát hành. Nhưng điều này không còn đúng trong tình huống của chúng ta nữa. Đôi khi, một tính năng gần như đã sẵn sàng và một số nhà phát triển sẽ bắt đầu mã hóa tính năng tiếp theo (nếu không, họ sẽ ngồi chờ đợi một hoặc hai nhà phát triển hoàn thành và hợp nhất).

Sau đó, khi tính năng 1 kết thúc, nó được hợp nhất vào thân cây, nhưng có một số cam kết của tính năng 2 đi kèm.

Vì vậy, chúng ta thậm chí có nên bận tâm với nhánh phát triển, vì chúng ta chỉ có một nhánh? Tôi đã đọc về sự phát triển dựa trên thân cây và sự trừu tượng hóa chi nhánh, nhưng hầu hết các bài viết tôi thấy tập trung vào phần trừu tượng hóa chi nhánh. Tôi có ấn tượng rằng những thay đổi lớn sẽ kéo dài qua một số bản phát hành. Đây không phải là vấn đề chúng ta gặp phải.

Bạn nghĩ sao? Chúng ta chỉ có thể làm việc trên thân cây? Trường hợp xấu nhất là (tôi nghĩ) rằng chúng ta sẽ phải tạo một thẻ từ thân cây và chọn những cam kết mà chúng ta cần, bởi vì một số cam kết / tính năng chưa sẵn sàng sản xuất.


1
Tôi nghĩ sẽ tốt hơn nếu bạn có nhiều hơn một chi nhánh. Một cho mỗi tính năng. Bằng cách này, nếu bạn từng bắt đầu làm việc trên một tính năng lớn sẽ mất một chút thời gian, bạn sẽ không giữ các bản sửa lỗi và như vậy cho các phiên bản đã được phát hành.
Amy Anuszewski

Một nhánh cho mỗi tính năng dường như làm cho nó phức tạp hơn, trong khi chúng tôi đang cố gắng giảm độ phức tạp. Ngoài ra, nếu có một lỗi (tức là cho 1.0), nó có thể được thực hiện trên một nhánh được tạo từ thẻ. Sau đó, chúng ta có thể gắn thẻ nhánh đó (tạo 1.1), giải phóng nó và hợp nhất lỗi vào thân cây. Phát triển các tính năng lớn sẽ tiếp tục trên thân cây.
Peter

Câu trả lời:


6

IMHO làm việc trực tiếp trên thân cây là tốt nếu bạn có thể cam kết với số lượng nhỏ và bạn có tích hợp liên tục tại chỗ, do đó bạn có thể đảm bảo (ở mức độ hợp lý) rằng các cam kết của bạn không phá vỡ chức năng hiện có. Chúng tôi cũng làm điều đó trong dự án hiện tại của chúng tôi (thực tế tôi chưa từng làm việc trong bất kỳ dự án nào sử dụng các nhánh cụ thể theo nhiệm vụ theo mặc định).

Chúng tôi chỉ tạo một nhánh trước khi phát hành hoặc nếu một tính năng mất nhiều thời gian để thực hiện (nghĩa là kéo dài nhiều lần lặp / phát hành). Kích thước thô của một nhiệm vụ hầu như luôn có thể được ước tính đủ tốt để chúng ta biết trước liệu chúng ta có cần một nhánh riêng cho nó hay không. Chúng tôi cũng biết thời gian còn lại trước khi phát hành tiếp theo (chúng tôi xuất bản các bản phát hành khoảng 2 tháng một lần) để dễ dàng xem liệu một nhiệm vụ có phù hợp với thời gian có sẵn trước khi phát hành tiếp theo hay không. Nếu nghi ngờ, chúng tôi hoãn nó cho đến khi nhánh phát hành được tạo, thì bạn có thể bắt đầu làm việc với nó trên thân cây. Cho đến nay chúng tôi chỉ cần tạo một nhánh cụ thể theo nhiệm vụ một lần (trong khoảng 3 năm). Tất nhiên dự án của bạn có thể khác nhau.


1
Tôi với Peter. Chúng tôi có một chi nhánh cho mỗi bản phát hành được hỗ trợ, nhưng nếu không thì hoạt động trong thân cây. Chúng tôi cũng sử dụng tích hợp liên tục, nhưng lưu ý rằng điều này chỉ có nghĩa là nó sẽ biên dịch và không phải là nó không bị hỏng chức năng hiện có, ngay cả với các bài kiểm tra đơn vị.
Ian

@Ian, tất nhiên không có thử nghiệm nào có thể đảm bảo trong thực tế rằng mã không có lỗi 100% ... có nguồn lực hạn chế, chúng tôi hướng đến mức độ an toàn hợp lý (định nghĩa về miền cụ thể và dự án). Cũng lưu ý rằng CI cũng có thể chạy các bài kiểm tra tích hợp, v.v., không chỉ kiểm tra đơn vị.
Péter Török

Điều này hoạt động cho đến khi nó thất bại. Nếu bạn cần triển khai sửa lỗi trước khi tính năng mới sẵn sàng ... Hoặc nếu một bản phát hành tính năng mới chưa sẵn sàng cho thời nguyên thủy như bạn nghĩ thì việc thay đổi mã đó trở nên khó khăn hơn nhiều nếu bạn không sử dụng phân nhánh.
SoylentGray

@Chad, các bản vá cho bản phát hành mới nhất được thực hiện trên nhánh phát hành tương ứng, không có sự can thiệp nào từ thân cây. Và chúng tôi thử nghiệm các tính năng mới khá rộng rãi để chúng tôi biết khi nào chúng sẵn sàng cho thời gian chính. Cấp, chúng tôi có tương đối ít tính năng lớn trong dự án của chúng tôi. Và vì nó là một ứng dụng web phía máy chủ, nên việc thêm cờ DB để bật / tắt các tính năng là khá dễ dàng. YMMV.
Péter Török

LOL ok Tôi hiểu sai và nghĩ rằng bạn chỉ có thân cây (với một ngoại lệ) Tôi đã sử dụng phương pháp này cũng tốt cho một nhóm nhỏ và các bản phát hành nhỏ thường xuyên, nó không hoạt động tốt đối với chúng tôi khi phát hành lớn thường xuyên (3-6 tháng ) nội tâm.
SoylentGray

1

Những gì bạn đang mô tả với sự phát triển tính năng của bạn là phát triển song song (phát triển đồng thời nhắm mục tiêu phát hành sản phẩm khác nhau) và nó đòi hỏi các chi nhánh phải xử lý nó đúng cách. Bạn có thể có một nhánh cho mỗi bản phát hành hoặc cho mỗi tính năng nếu bạn thường phải soạn lại các tính năng sẽ tạo một bản phát hành cụ thể.

Một cách khác để làm điều này, sẽ là làm việc ngoài thân cây theo mặc định nhưng tạo một nhánh nếu bạn mong muốn nhiệm vụ của mình kéo dài qua phiên bản tiếp theo. Bạn luôn luôn gắn thẻ phát hành của khóa học.

Cách tiếp cận nào bạn thực sự phụ thuộc vào mức độ quản lý bạn có thể làm trước. Nếu bản phát hành điển hình không thực sự có sự phát triển song song thì tôi sẽ thực hiện cách tiếp cận thứ hai.


Tôi đồng ý và OP đã xác nhận điều này với: 'Đôi khi, một tính năng gần như đã sẵn sàng và một số nhà phát triển sẽ bắt đầu mã hóa tính năng tiếp theo ...'
Chris

Có, nhưng chúng tôi không bao giờ phải soạn lại. Các tính năng được triển khai theo trình tự thời gian và, ví dụ, tất cả các tính năng 1-4 phải có trong phiên bản tiếp theo (giả sử 1.0). Lần duy nhất điều này có thể có vấn đề là khi sự phát triển đã bắt đầu trên tính năng 5, dành cho bản phát hành sau đó (2.0). Sau đó, chúng tôi phải đảm bảo những thay đổi này không được thực hiện trong thẻ / phát hành (1.0). Làm một chi nhánh trước khi phát hành thực sự có thể khắc phục điều đó.
Peter
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.