2011-08-30 16 views
8

Chúng tôi đang sử dụng một số A successful Git branching model bởi Vincent Driessen cho mô hình phân nhánh của chúng tôi. Tất cả đều ổn nhưng tôi chưa thực sự thấy một vấn đề cụ thể nào được đưa ra.Sửa lỗi trong một chi nhánh tính năng

Từ những gì tôi đã hiểu, khi một tính năng mới được yêu cầu, bạn chi nhánh của development và tạo chi nhánh feature mới. Bạn sẽ làm việc về điều này và khi bạn hoàn thành, bạn sẽ hợp nhất chi nhánh này vào chi nhánh development.

Điều gì sẽ xảy ra nếu nhà phát triển tạo một đối tượng địa lý và sau đó hợp nhất tính năng đó trở lại development chỉ để phát hiện ra có một số lỗi trong mã tính năng. Điều này nên được sửa ở đâu? Nếu chi nhánh fix/bugfix mới bắt đầu phát triển và mã sẽ được khắc phục ở đó? Tôi không thể nhìn thấy một cách khác.

Làm cách nào để thực hiện điều này?

Cảm ơn

+0

tôi dường như đã tạo ra một bản sao của câu hỏi của bạn, tuy nhiên trong câu hỏi của tôi tôi đã thực hiện một cách tiếp cận cung cấp các lệnh để tạo một repo thử nghiệm để kiểm tra các khái niệm: http://stackoverflow.com/questions/32244693/changes-on-feature- branch-after-merge-to-master/32244878? noredirect = 1 # comment52371049_32244878 Bạn có phiền không nếu tôi mở rộng câu hỏi của bạn bằng repo ví dụ và xem các câu trả lời được đề xuất thực sự được áp dụng như thế nào cho repo đó và kết quả là gì ? – TheMeaningfulEngineer

Trả lời

9

Hãy nhớ rằng một mô hình chỉ là một mô hình - đó là về việc cung cấp cho bạn một cấu trúc giúp bạn hiệu quả hơn, không mù quáng theo một bộ quy tắc. Điều đó có nghĩa là bạn nên cảm thấy tự do để tinh chỉnh mọi thứ và tìm ra điều gì làm việc trong hoàn cảnh của bạn, bởi vì nó có thể không hoạt động trong mọi tình huống.

Tôi nghĩ rằng bạn có một sự lựa chọn trong tình huống này:

  1. cuộn lại việc hợp nhất và tiếp tục làm việc trên các chi nhánh tính năng cho đến khi nó đã sẵn sàng
  2. Bắt đầu một chi nhánh mới để sửa chữa lỗi.

Mà một trong những bạn chọn phụ thuộc vào các yếu tố như:

  • khách hàng của bạn có thể nhìn thấy lỗi? Tạo chi nhánh bản sửa lỗi hoặc hotfix.
  • Lỗi này có thực sự tồi tệ và ngăn các tiến trình khác trên chi nhánh phát triển không? Quay lại thay đổi.
  • Đây có phải là vấn đề nhỏ với tác động bên ngoài tối thiểu không? Chỉ cần tiếp tục làm việc trên nhánh tính năng và hợp nhất lại khi sẵn sàng.

Sự khác biệt giữa chi nhánh tính năng và chi nhánh bugfix không quan trọng theo quan điểm của Git. Nó chỉ quan trọng nếu bạn sử dụng các nhãn đó cho tài liệu nội bộ hoặc các mục đích kiểm toán khác (ví dụ: để theo dõi những gì được hiển thị cho người dùng bên ngoài).

Chống lại sự cám dỗ để làm việc ngay lập tức ngay cả khi bạn nghĩ rằng bugfix sẽ rất nhanh - không có gì đơn giản như nó có vẻ, và bạn sẽ đau đầu sau này nếu có gì sai.

Rough đại diện trực quan của sự lựa chọn của bạn:

State machine diagram of choices

1

Nếu mà chi nhánh tính năng là một trong những công (nghĩa là bị đẩy đến một repo từ xa được nhân bản/sử dụng bởi những người khác), nó là tốt nhất để tạo ra một ngành mới và cô lập các debug trong nói sửa chữa chi nhánh.
(thay vì cố gắng rebase 'feature' chi nhánh trên đầu trang 'develop' nhánh).

Ý tưởng vẫn không ghi lại các cam kết gỡ lỗi trung gian trực tiếp trong chi nhánh develop, nhưng chỉ ghi lại cam kết kết quả sẽ khắc phục lỗi được giới thiệu bởi feature hợp nhất chi nhánh ở vị trí đầu tiên.

0

Chỉ cần tạo một nhánh (hoặc sử dụng chi nhánh cũ, đã hợp nhất feature) và sửa nó ở đó.

Sử dụng nhánh cũ/tạo chi nhánh mới chỉ giống nhau --- bạn không thể đặt tên nào sau khi hợp nhất.

3

Làm thế nào về finding the commit that introduced the bug, and creating a new branch rooted there? Với phương pháp này:

  • Không có nguy cơ tạo ra tài liệu tham khảo gãy do rebase hoạt động
  • Chỉ cần từ tổ tiên của chi nhánh phát triển, chi nhánh tính năng, và bất kỳ chi nhánh khác có thể bị ảnh hưởng, bạn có thể cho biết nơi bạn nên hợp nhất chi nhánh bugfix của bạn sau khi hoàn tất. Điều này đúng ngay cả khi "tính năng" đã hợp nhất với "phát triển" nhiều lần kể từ khi giới thiệu lỗi.
  • Nếu bạn xác định cam kết giới thiệu lỗi và gốc từ đó, nhà phát triển sẽ có thể biết nơi họ cần hợp nhất chi nhánh bugfix, ngay cả khi họ không quen thuộc với bố cục repo
  • Bạn sẽ có một chi nhánh mà bạn có thể hợp nhất mà không sợ kéo theo những thay đổi không liên quan tiếp theo. Ví dụ: giả sử ai đó đang làm việc trên "tính năng-beta" là chi nhánh phụ của "tính năng" được phân tách ngay sau khi lỗi được giới thiệu. Họ có thể kéo chi nhánh bugfix một cách dễ dàng, mà không phải lo lắng về việc kéo tất cả mọi thứ khác đã xảy ra trên "tính năng".
  • Cách tiếp cận này làm giảm sự cần thiết phải cherry chọn thủ, trong đó có nhược điểm là nó thay đổi tên của các cam kết (do đó phá hoại một trong những lợi thế rất lớn git, mà đang áp dụng một cái tên rõ ràng để tất cả mọi thứ.)
+0

+1000. Tôi cũng nghĩ đây là phương pháp được khuyến khích nhất. Nó dẫn đến một lịch sử cam kết rất rõ ràng. Ở phía đối diện, việc hái hoa anh đào là cách tiếp cận mờ đục nhất vì nó hoàn toàn ẩn nơi lỗi được giới thiệu và nơi nó đã được sửa. Cũng lưu ý rằng git bisect giúp rất nhiều trong việc tìm kiếm các cam kết giới thiệu lỗi. Chắc chắn là một cách tiếp cận được đề xuất cao. –