2011-10-31 38 views
5

Tôi đang phát triển một hệ thống mà tôi đang theo dõi các đường mòn của một dự án khác, thêm công cụ của riêng tôi nhưng không trực tiếp vào dự án gốc. Tôi thiết lập kho của mình với ba chi nhánh từ xa:Hợp nhất các nhánh từ xa trong git

  1. Bản gốc - Nơi phát triển của tôi diễn ra.
  2. Nhà cung cấp - Nơi tôi đồng bộ hóa với dự án ban đầu theo định kỳ.
  3. Tích hợp - Nơi tôi muốn hợp nhất (Chính) và (Nhà cung cấp) với nhau.

Ý tưởng luồng công việc của tôi là để đồng bộ hóa diễn ra tự động (vì về cơ bản là chuyển tiếp nhanh) và tích hợp nửa hướng (vì yêu cầu hợp nhất và sửa). Tôi đã có phần đầu tiên (đồng bộ) được bảo hiểm, nhưng tôi không thể tìm ra những lệnh/s để thực sự phát hành để tích hợp Master và Vendor vào tích hợp.

Đây là sản phẩm của git branch -a:

* integration 
    master 
    vendor 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/integration 
    remotes/origin/master 
    remotes/origin/vendor 

Làm thế nào để đi về phía trước từ thời điểm này đến:

  1. Đồng bộ hóa không gian làm việc này với các kho lưu trữ từ xa?
  2. Nhà cung cấp Merge & tổng thể thành tích hợp?
  3. Đẩy tích hợp trở lại kho lưu trữ từ xa?

Và rõ ràng, nếu tôi có điều gì đó sai trong luồng công việc, tôi rất muốn nghe.

+0

Chi nhánh tích hợp không cần thiết, chi nhánh nhà cung cấp đã có mã từ Nhà cung cấp và Thạc sĩ. Lưu ý rằng mỗi nhánh thực sự là một tham chiếu, (con trỏ trong C++), nó tham chiếu đến điểm cam kết. Trong trường hợp đó, chi nhánh đấu giá đã là những gì bạn cần trong Integration branch –

+0

Nhà cung cấp trong trường hợp đó không có mã từ Master. Hãy nghĩ về nó như là hai dự án song song trong đó A (dự án của tôi) cần cập nhật của B (dự án khác) nhưng không phải ngược lại. –

Trả lời

2

Trong khi chi nhánh integration không thực sự cần thiết (bạn có thể tích hợp trực tiếp vendor vào master, bằng cách rebase master trên đầu trang vendor), nó có thể hữu ích.

Lồng ghép một nhánh A trong một chi nhánh B có thể được thực hiện bằng cách:

  • sáp nhập A trong B (nhưng điều đó có nghĩa là bất kỳ phát triển hiện nay bạn có trong B là "giữ lại" trong khi chờ nghị quyết của bất kỳ cuộc xung đột nhập và việc chạy lại tất cả các thử nghiệm)
  • rebasing B trên đầu trang của A (git rebase A), nhưng điều đó sẽ thay đổi lịch sử của B.

tôi sẽ rebase integration trên đầu trang của Vendor, giải quyết mâu thuẫn đó, và sau đó hợp nhất integration trong master, giữ master lịch sử tuyến tính.

+0

Tôi muốn liên tục tích hợp nhà cung cấp và tổng thể nhưng không can thiệp vào tiến độ hiện tại trên máy chủ (sự tích hợp được đề cập có thể kéo dài), đó là lý do tại sao tôi cần nhánh Tích hợp. Rebasing Integration on Vendor là một ý tưởng hay. Những gì tôi đang thiếu là các lệnh thực tế cần thiết để thực hiện việc hợp nhất vì những gì tôi đã thử trong quá khứ không thực sự hiệu quả. –

+0

@EldadMor 'git checkout Integration; git rebase Vendor; git checkout master; git merge Integration' là đủ. Điều đó cho thấy bạn không đẩy 'Integration' vào repo công cộng, cho phép bạn rebase nó thường xuyên như bạn cần. – VonC

+0

Tôi nghĩ đó là những gì tôi đã thử; Tôi sẽ thử lại và lấy lại kết quả. Cảm ơn! –

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