Một đồng nghiệp của tôi nói với tôi rằng anh ta đang suy nghĩ trong việc đưa ra máy chủ CI của chúng tôi để cam kết Revert rằng thất bại trong việc xây dựng, vì vậy HEAD
trong master
luôn ổn định (như trong truyền xây dựng ít nhất).
Đây có phải là một thực tiễn tốt nhất hoặc nó có thể có vấn đề hơn là chỉ master
bị hỏng cho đến khi nhà phát triển sửa nó?
Tôi nghĩ rằng việc hoàn nguyên cam kết sẽ làm cho nhiệm vụ của nó trở nên phức tạp hơn và sửa chữa (nhà phát triển sẽ phải hoàn nguyên lại và sau đó cam kết sửa lỗi, điều này cũng sẽ làm lộn xộn git log
) và chúng ta chỉ nên để lại cam kết và sau đó cam kết sửa chữa. Mặc dù tôi thấy một số lợi thế trong việc master
ổn định, nhưng việc hoàn thành các cam kết thất bại này không thuyết phục được tôi.
chỉnh sửa: Không quan trọng nếu nó là master
hoặc bất kỳ nhánh phát triển nào khác, nhưng câu hỏi vẫn giữ nguyên: hệ thống CI có nên hoàn nguyên một cam kết đã thất bại trong quá trình xây dựng không?
một chỉnh sửa (lenghty) khác: Ok, chúng tôi đang sử dụng git
một cách kỳ lạ. Chúng tôi tin rằng khái niệm về các chi nhánh đi ngược lại với CI thực sự, bởi vì việc cam kết với một chi nhánh sẽ tách biệt bạn khỏi các nhà phát triển khác và những thay đổi của họ, đồng thời thêm thời gian khi bạn phải tái hòa nhập chi nhánh và giải quyết các xung đột có thể xảy ra. Nếu mọi người cam kết với master
xung đột này sẽ giảm đến mức tối thiểu và mọi cam kết đều vượt qua tất cả các bài kiểm tra.
Tất nhiên, điều này buộc bạn chỉ đẩy ổn định (hoặc bạn phá vỡ bản dựng) và lập trình cẩn thận hơn để không phá vỡ tính tương thích ngược hoặc thực hiện chuyển đổi tính năng khi giới thiệu các tính năng mới.
Có sự đánh đổi khi thực hiện CI theo cách này hoặc cách khác, nhưng đó là ngoài phạm vi câu hỏi (xem câu hỏi liên quan cho việc này). Nếu bạn thích, tôi có thể đặt lại câu hỏi: một nhóm nhỏ các nhà phát triển làm việc cùng nhau trong một nhánh tính năng. Nếu một nhà phát triển cam kết một cái gì đó phá vỡ bản dựng cho nhánh đó, hệ thống CI có nên hoàn nguyên cam kết hay không?
master
để bắt đầu với. Đó là những gì các nhánh phát triển và tính năng được sử dụng cho. Những thay đổi đó diễn ra trong một cái gì đó giống như một nhánh tích hợp nơi bạn có thể kiểm tra xem tất cả các tính năng mới của một số nhà phát triển có hoạt động cùng nhau không và chỉ khi điều này được thử nghiệm mới có thể đi vào tổng thể. Hoặc ít nhất đó là một quy trình công việc có thể.