Sử dụng các nhánh thử nghiệm trong Git


11

Chúng tôi có ai đó (hãy gọi anh ấy là Ted) chịu trách nhiệm thử nghiệm các tính năng mới và sửa lỗi.

Chúng tôi đang sử dụng GitGitHub . masternên / luôn luôn có thể triển khai và developmentlà nơi chúng tôi cam kết / hợp nhất các tính năng mới hoặc sửa lỗi, nhưng chỉ sau khi chúng được Ted kiểm tra.

Dự án là trong PHP.

Tôi muốn quá trình thử nghiệm diễn ra như sau:

  1. Một nhà phát triển muốn làm việc trên một tính năng mới (giả sử tính năng / lỗi # 123 như Ted ghi lại trong trình theo dõi vấn đề), vì vậy anh ta kéo origin/developmentđến developmentkho lưu trữ cục bộ của mình và tạo một chi nhánh mới (giả sử issue-123) từ đó.
  2. Khi anh ấy hài lòng với công việc của mình, anh ấy cam kết và đẩy chi nhánh mới của mình đến origin.
  3. Ted kết nối test.ourproject.com/choose-branchvà xem danh sách các chi nhánh originvà chọn bật issue-123(có thể thực hiện được thông qua trang web). Sau đó, anh ta tiếp tục test.ourproject.com, kiểm tra ứng dụng web (anh ta thực sự vô dụng) và sau một vài lần qua lại với nhà phát triển, anh ta hài lòng với tính năng này.
  4. Ted nói với các nhà phát triển rằng ông có thể hợp nhất issue-123vào developmenttrên origin.
  5. Rửa sạch và lặp lại.

Bước thứ ba, tôi có thể hack thứ gì đó thực hiện công việc (hiển thị và chuyển nhánh từ một trang cụ thể), nhưng tôi cảm thấy rằng những gì tôi đã mô tả là một mẫu rất phổ biến.

Vì vậy, câu hỏi của tôi là: Đây có phải là một quy trình công việc tốt / bền vững / có thể duy trì để phân nhánh? Bạn có thể sao lưu câu trả lời của mình bằng cách trích dẫn một số ví dụ về các dự án khác theo quy trình công việc này không?


"kiểm tra địa ngục của ứng dụng web (anh ấy thực sự liều lĩnh) và sau vài lần qua lại với nhà phát triển, anh ấy hài lòng với tính năng này." - Người này phải gần gũi với thiên tài. Anh ta thực sự biết những gì mã trong câu hỏi là về? Có những dự án như thế này nhưng tôi thực sự nghi ngờ về kết quả của bước 3.
SChepurin

Tôi nên làm rõ hơn issue-123đề cập đến lỗi / tính năng # 123 khi Ted ghi lại mọi lỗi / tính năng mới trên trình theo dõi vấn đề của chúng tôi.
cpa

@cpa: Than làm cho nó rõ ràng hơn. Các câu hỏi có thể chỉnh sửa.
Jan Hudec

@SChepurin: Người kiểm tra không cần biết gì về mã. Họ chỉ cần có một danh sách các tính năng cần thiết và lỗi và trường hợp thử nghiệm cho họ.
Jan Hudec

1
@cpa Không hoàn toàn chắc chắn những gì bạn đang theo đuổi. Bạn muốn một số phần mềm giúp người kiểm tra tìm ra những nhánh nào có sẵn để thử nghiệm và chuyển nhánh cho chúng? Hoặc một quá trình cho người thử nghiệm để làm theo?
mjs

Câu trả lời:


5

Luồng công việc chi nhánh nghe có vẻ giống như gitflow http://jeffkreeftmeijer.com/2010/why-arent-you-USE-git-flow và có các công cụ hỗ trợ xung quanh nó. Nó rất được khuyến khích.

Nếu chỉ có một người kiểm tra, quy trình kiểm tra của bạn nghe có vẻ ổn, nhưng nếu có nhiều người thì sự phát triển có thể di chuyển giữa bắt đầu và kết thúc, và tất nhiên việc kiểm tra lý tưởng nên được thực hiện đầy đủ sau khi hợp nhất. Đây là nơi kiểm tra tự động thực sự có thể giúp hoặc một người kiểm tra chậm (kỹ lưỡng) có thể không bao giờ kết thúc!

Một vấn đề khác là với nhiều tính năng và các nhánh, nó trở nên tạm thời để trộn và kết hợp các tính năng thành một bản phát hành (hoặc chọn đuổi đi sau khi chấp nhận và hợp nhất) hoặc có lẽ nếu các tính năng phụ thuộc lẫn nhau. Vấn đề là nếu bạn bắt đầu bắt đầu viết lại lịch sử (rebase / xóa một cam kết hoặc hợp nhất) trên một nhánh CÔNG KHAI - có nghĩa là một nhánh đã được đẩy sang một repo nhiều chiều. Đây là viết lại lịch sử công cộng. Nó có thể được thực hiện cho tốt hoặc xấu và ngay cả khi được thực hiện cho tốt có thể gây ra vấn đề cho người không thận trọng, và thực hành tốt nhất là tránh nó để câu hỏi sẽ không bao giờ được đưa ra. Tuy nhiên, một số quy trình công việc của chi nhánh tích hợp làm cho điều này rất hấp dẫn, vì vậy nếu bạn có sự bảo vệ mạnh mẽ đối với các chi nhánh đó (ví dụ: gitolite cho mỗi hạn chế của chi nhánh người dùng) và mọi người mong đợi hoạt động đó vì vậy hãy luôn phản hồi mã của họ trên một chi nhánh như vậy, hãy thận trọng!

Tôi cũng muốn khuyên bạn nên đọc http://sethrobertson.github.com/GitBestPractices/ để thảo luận về tất cả những vấn đề này và có nhiều tài liệu tham khảo tốt.


git-flowkhông chính xác những gì tôi đang tìm kiếm, nhưng đó chắc chắn là thứ chúng tôi cần! Cảm ơn!
cpa

2

Tôi không chắc chắn chính trang chuyển đổi là một mô hình phổ biến. Hầu hết các dự án có lẽ chỉ đơn giản là có người kiểm tra kiểm tra nó bằng lệnh git.

Cách tiếp cận chung chắc chắn nghe có vẻ hợp lý.

Google thậm chí đã viết Gerrit để hỗ trợ phong cách tương tự; đó là nhiều hơn về việc xem xét mã, nhưng phê duyệt tích hợp thường bao gồm cả xem xét và thử nghiệm. Thông thường, nó cũng được kết nối với máy chủ tích hợp liên tục, xây dựng tất cả các lần gửi đầu tiên (tôi không chắc liệu họ có sử dụng Jenkins trong Google hay không, nhưng tôi tin rằng tôi đã thấy các trình kết nối phù hợp ở đâu đó).

Git chính nó sử dụng một biến thể nhỏ về chủ đề. Nhà bảo trì của nó có một kịch bản hợp nhất tất cả các đệ trình đang chờ xử lý thành một nhánh được gọi là pu(đối với "các bản cập nhật được đề xuất" có lẽ là chi nhánh bị xóa và được tạo lại mỗi lần vì các đệ trình đang chờ xử lý thường bị từ chối). Điều này được thử nghiệm bởi nhiều người. Nếu nó ổn, thì các bài nộp được coi là hoàn chỉnh sẽ được hợp nhất vào next(giống như bài dự thi của bạn development). Nếu không, hơn ai đó kiểm tra các bài nộp cá nhân để xem cái nào bị hỏng. Điều này giúp người kiểm tra dễ dàng hơn một chút vì họ không phải chuyển nhánh hầu hết thời gian; họ chỉ đơn giản là báo cáo cho dù tích hợp thử nghiệm hoạt động.


1

Nếu thử nghiệm của bạn được thực hiện tự động chứ không phải thủ công, tôi nghĩ Travis (một hệ thống CI cho GitHub) sẽ thực hiện khá nhiều việc bạn muốn - nó sẽ tự động chạy thử nghiệm trên tất cả các yêu cầu kéo. ( Thông tin thêm về quy trình này, bao gồm cả ảnh chụp màn hình. )

Lưu ý rằng các bài kiểm tra được chạy không phải trên nhánh, mà là nhánh sau khi nó được hợp nhất thành chủ. (tức là những gì bạn sẽ nhận được sau khi hợp nhất chi nhánh thành chủ - bạn được đảm bảo rằng các bài kiểm tra sẽ vẫn chạy thành công sau hợp nhất.)

Nếu các xác nhận được thêm vào chi nhánh, các kiểm tra sẽ được chạy lại. (Mặc dù vì một số lý do, việc thêm các cam kết vào chủ dường như không chạy lại các bài kiểm tra.)


Điều gì xảy ra nếu xét nghiệm thất bại trên chi nhánh? Bạn có thực sự muốn có mã trên master với các bài kiểm tra thất bại? ... Điều đó có thể đã được nhặt trên nhánh trước khi hợp nhất thành chủ? Cá nhân tôi nghĩ rằng chỉ có mã xây dựng và vượt qua tất cả các đơn vị, tích hợp và các thử nghiệm khác nên được hợp nhất thành chủ, vì đây là nơi phát hành bản dựng.
Tro

@Ash Mã không thực sự được hợp nhất thành chủ; theo tôi hiểu, các bài kiểm tra được chạy trên cơ bản là một nhánh tạm thời, là kết quả của việc hợp nhất bài kiểm tra dưới nhánh thành chủ.
mjs
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.