Tôi nghĩ rằng bài viết này, Mô hình phân nhánh Git thành công , rất nổi tiếng trong số những người dùng DVCS có kinh nghiệm.
Tôi sử dụng hg
chủ yếu, nhưng tôi cho rằng cuộc thảo luận này là tốt cho bất kỳ DVCS nào.
Quy trình làm việc hiện tại của chúng tôi là mỗi nhà phát triển nhân bản repo chính. Chúng tôi viết mã trên repo cục bộ của riêng mình, chạy thử nghiệm và nếu mọi việc suôn sẻ sẽ đẩy đến chủ.
Vì vậy, chúng tôi muốn thiết lập các máy chủ CI như Jenkins và cải thiện quy trình làm việc của chúng tôi với hệ thống cung cấp trong tương lai (đầu bếp, bù nhìn, ansible, v.v.).
Phần thực
Vâng, mô hình trình bày ở trên hoạt động tốt nhưng các chi nhánh có thể phá vỡ CI. Nhánh tính năng nên đồng bộ hóa với nguồn gốc (theo bài viết, nó sẽ là development
nhánh) để làm cho CI và hợp nhất trơn tru, phải không?
Nói Alice và Bob đang làm việc trên hai tính năng. Nhưng Alice đã xong việc vào ngày hôm sau. Tính năng của Bob mất một tuần. Vào thời điểm Bob hoàn thành, các thay đổi của anh đã hết hạn (có thể Alice tái cấu trúc / đổi tên một số lớp).
Một giải pháp là mỗi nhà phát triển phải kéo master/origin
để kiểm tra xem có bất kỳ thay đổi nào không. Nếu Alice cam kết, Bob nên kéo và hợp nhất vào không gian làm việc của anh ấy để nhánh tính năng của anh ấy được cập nhật.
- Đây có phải là một cách tốt?
- Các nhánh này có tồn tại trong repo chính (không phải bản sao cục bộ không?) Có nghĩa là mọi nhà phát triển nên có đặc quyền đối với repo chính trên GitHub / Bitbucket để họ có thể tạo một nhánh mới? Hoặc điều này được thực hiện tại địa phương?
- Cuối cùng, mô hình trình bày bởi bài viết sẽ phá vỡ CI nếu các nhánh không được đồng bộ hóa với
origin/master
. Vì chúng tôi muốn xây dựng hàng đêm, các nhà phát triển có nên kéo và hợp nhất trước khi họ rời khỏi công việc không và CI có chạy trên từng nhánh tính năng không?