2012-01-26 35 views
6

Chúng tôi có thiết lập sau: Ba ứng dụng tương tự nhau với mã chung được trích xuất thành một khung công tác. Mỗi ứng dụng được quản lý trong kho lưu trữ git của riêng chúng và bao gồm khung làm git submodule.Luồng công việc Git cho các phiên bản khác nhau của một khung

Vấn đề là các ứng dụng hiện được phát triển song song với các tính năng mới đang được thêm vào khung mà các ứng dụng khác không cần hỗ trợ ngay lập tức. Hiện tại chúng tôi có các nhánh khác nhau của khung công tác cho tất cả các ứng dụng. Một ứng dụng sử dụng nhánh chính của khung công tác vì hầu hết các tính năng mới được giới thiệu lần đầu tiên trong ứng dụng này.

Khung chi nhánh

  • thạc sĩ (được sử dụng bởi ứng dụng A)
  • appB
  • APPC

Khi một tính năng mới được giới thiệu trong appB rằng cần thay đổi trong khuôn khổ những thay đổi này được tạo thành chi nhánh appB. Nếu những thay đổi này sau đó cần thiết trong ứng dụng A, thì appB chi nhánh đã được hợp nhất thành chính. Điều này có nghĩa là tất cả các thay đổi trong appB phải được hợp nhất thành master.

Hệ thống này làm việc nhưng đã có một số sai sót

  • sáp nhập một tính năng từ một chi nhánh có nghĩa khác chúng tôi phải hợp nhất tất cả những thay đổi
  • dễ dàng để mất theo dõi những gì đã được sáp nhập đã hoặc chuyện gì đang xảy đến được sáp nhập khi sáp nhập một chi nhánh vào một
  • đánh dấu những thay đổi vi phạm đã được thực hiện sử dụng bài viết cam kết, khiến cho điểm cuối cùng thậm chí quan trọng hơn

Chúng tôi là cu rrently tìm kiếm một công việc mới. Tôi đã nghĩ về việc có các chi nhánh sau

  • chủ
  • Appa
  • appB
  • APPC

Vì vậy, đối với từng ứng dụng một chi nhánh và một chi nhánh tổng thể bao gồm tất cả các thay đổi. Khi các tính năng mới được phát triển, một nhánh tính năng sẽ được tạo và sau đó được áp dụng cho chính cũng như cho tất cả các nhánh ứng dụng mà tính năng này là cần thiết ngay lập tức. Các ứng dụng khác có thể hợp nhất chi nhánh tính năng khi chúng cần tính năng này sau này.

tôi nhìn thấy những vấn đề sau đây với điều này

  • Làm thế nào tôi có thể hợp nhất một chi nhánh tính năng vào nhiều ngành, chỉ trộn các thay đổi đã xảy ra tại các chi nhánh. Tôi biết "git rebase on ..." nhưng tôi không chắc liệu tôi có thể sử dụng lệnh này nhiều lần không.
  • Tôi có nên sử dụng git cherry-pick để hợp nhất các đối tượng thành nhiều nhánh không? Tôi không muốn làm điều này, bởi vì tôi có thể nghĩ rằng điều này sẽ dễ bị lỗi khi không chọn tất cả các thay đổi được thực hiện trong chi nhánh tính năng
  • Cách theo dõi tính năng nào (chi nhánh) đã được áp dụng cho ứng dụng nào. Tôi có thể sử dụng branch --no-merge hay nó chỉ hoạt động nếu các nhánh có cùng tổ tiên?

Cách của tôi có phải là cách tốt nhất để thực hiện việc này hay tôi nên suy nghĩ lại chiến lược của mình hoàn toàn?

+2

Xin chào Silver, bạn có thể vui lòng cập nhật câu hỏi này với quy trình làm việc mà bạn đã kết thúc và cách hoạt động của câu hỏi này. Tôi đang đối mặt với tình trạng tương tự, và đã nhận nó sai quá. Do đó tôi quan tâm đến những gì bạn đã làm. – BlinkyBill

Trả lời

0

Như giải thích trong "Git & Working on multiple branches", hai giải pháp thực tế khi áp dụng cam kết với nhiều chi nhánh (đó là những gì bạn sẽ làm gì với "tính năng chi nhánh" tùy chọn của bạn) là:

  • merge (mà nên cho phép bạn để tiếp tục sử dụng lại tính năng đó, vì nó sẽ theo dõi những gì đã được hợp nhất với một lệnh cấm cụ thể): rebase --interactive có thể là để bạn đặt lại các cam kết, đặt trước các commit bạn muốn hợp nhất, và sau đó những cái bạn chưa sẵn sàng để hợp nhất.
  • cherry-picking (và bây giờ là supports a range of commits), nhưng tôi luôn luôn have been wary of cherry-picking.
+0

rebase --interactive dường như là một công cụ tốt cho việc này. Có bất kỳ tác động nào tôi cần phải biết khi sử dụng nó không? – sliver

+0

@sliver: chỉ rằng bạn không nên rebase một chi nhánh đã được chia sẻ (đẩy đến repo khác) với những người khác (như chi tiết trong http://stackoverflow.com/a/2825924/6309). Trong trường hợp của bạn, đó không phải là một vấn đề. – VonC

Các vấn đề liên quan