2010-02-24 28 views
8

Tôi sử dụng git để duy trì nhiều bản sao làm việc của mã của mình. Ý tưởng là tôi có thể kiểm tra bất kỳ chi nhánh nào, xây dựng và chạy nó để xem cách tính năng của chi nhánh x phù hợp với trạng thái hiện tại của mã.Kết hợp các thay đổi từ chủ vào tất cả các nhánh bằng Git?

Chi nhánh chính của Git là Trunk và các nhánh git khác là các tính năng hoặc những thứ tôi muốn thử. Do đó, cách sử dụng điển hình của tôi là cập nhật bản gốc với các bản sửa lỗi mới nhất và sau đó hợp nhất bản gốc thành từng nhánh riêng lẻ để mỗi phần trong số đó luôn được cập nhật.

Hệ thống này hoạt động tốt cho tôi, ngoại trừ việc tôi phải thanh toán chi nhánh, hợp nhất tổng thể và rửa/lặp lại cho các chi nhánh khác. Với hệ thống điều khiển phiên bản như git, tôi không thấy quy mô này rất tốt với thực tế là tôi có thể dễ dàng sinh sản rất nhiều chi nhánh theo thời gian.

Tôi vẫn là người mới bắt đầu, vì vậy tôi nghi ngờ có thể có một cơ chế sắp xếp mà tôi đã bỏ lỡ. Có cái nào không? Nếu không, làm thế nào để cam kết một sự thay đổi cho tất cả các chi nhánh để họ ở lại đến ngày của riêng mình?

+0

Bạn có việc thực hiện quy tắc ứng câu hỏi đó? – edi9999

+0

Không, đây thực sự là một quy trình thủ công. Đây cũng là lúc tôi là một người mới bắt đầu. Tôi hiện đang sử dụng luồng git, rất giống nhau, nhưng không yêu cầu tôi phải duy trì một số tập lệnh. – Carl

Trả lời

5

Một khả năng (không kiểm tra bản thân mình) sẽ là:

  • để thiết lập một repo trần nơi bạn có thể đẩy chi nhánh tổng thể của bạn.
  • có một cái móc sau nhận (xem githooks man page) trên đó repo trần mà sau đó sẽ đẩy tổng thể trên tất cả các "tính năng" repo bạn muốn
  • có một hậu nhận móc mỗi tính năng repo để bắt đầu:
    • một rebase của chi nhánh tính năng của bạn trên đầu trang của chủ (tốt nếu bạn chưa đẩy chi nhánh tính năng của bạn ở nơi khác)
    • hoặc hợp nhất của chủ trên chi nhánh tính năng của bạn.

Bạn vẫn sẽ cần phải nhận được vào tính năng repo của bạn và kiểm tra xem rebase hoặc hợp nhất không bị chặn do một số xung đột nhập.

+0

Có, tôi sẽ cần phải giải quyết thủ công bất kỳ xung đột hợp nhất nào. Cảm ơn. Tôi không có ý tưởng rằng móc thậm chí còn tồn tại. Tôi có một số đọc để làm: http://kernel.org/pub/software/scm/git/docs/githooks.html – Carl

+0

@carleeto: tốt điểm, tôi đã thêm liên kết trang người đàn ông githooks trong câu trả lời của tôi. – VonC

+0

Điều này có vẻ như bạn đang đề xuất nhiều kho lưu trữ thay vì nhiều nhánh. – Abizern

4

Nếu

  1. các ngành mà bạn muốn kết hợp các bậc thầy mới nhất cam kết vào không được công bố VÀ
  2. bạn muốn tất cả các cam kết trong tổng thể để được trong các ngành khác

sau đó bạn chỉ đơn giản là có thể rebase chúng vào master sau khi master đã được cập nhật. Kịch bản nhỏ này có thể hoạt động nếu bạn đang sử dụng một trình bao Unix. Nó sẽ khởi động lại từng nhánh vào master.

for BRANCH in `ls .git/refs/heads`; do git rebase master $BRANCH; done 
0

tôi làm như sau:

for BRANCH in $(ls git/refs/heads); do git checkout $BRANCH ; git merge origin/master $BRANCH ; done

+0

Bạn có thực sự chạy chương trình này không? 'cho b bằng $ (<.git/refs/heads); do echo $ b; done' in không có gì, vì vậy tôi không thể tưởng tượng làm thế nào nó có thể làm bất cứ điều gì. – Jeff

+0

Điều xấu của tôi, BRANCH var thay vì sử dụng $ BRANCH. – 3manuek

+0

Bạn có thể thấy từ mã tôi đã cung cấp rằng đó không phải là vấn đề. – Jeff

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