2009-09-11 26 views
6

Tôi là người mới trong Git.Phiên bản cũ của Mantain mà không tạo ra các chi nhánh tồn tại lâu dài

Tôi đã đọc: "Pro Git: Duy trì một dự án" (sách) và Git: tài liệu/howto/duy trì-git.txt

câu hỏi Tough cho tôi: làm thế nào để mantain các phiên bản cũ mà không tạo ra một chi nhánh riêng biệt tồn tại lâu dài. Nói cách khác, tôi quan tâm đến cách làm việc với một nhánh "maint" trong dự án Git.

Ví dụ: (sáp nhập với các nhánh chủ đề và tích hợp các cộng tác viên không được hiển thị, các nhánh khác của "tiếp theo", "pu" cũng không được hiển thị ở đây).

Những hình ảnh này cũng có thể xem được at here.

  +--master 
      | 
      +--maint 
      | 
    (c1)->(c2) 
      | 
      +--tag : feature-release v1.0 

Lần sau:

tag:feature-rel v1.0--+     +--master 
         |     | 
       (c1)->(c2)->(c)->(c)->(c)->(c) 
         | 
         +->(c)->(c)->(c) 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

Tiếp theo, như mô tả trong "duy trì-git.txt", hãy chạy:

$ git checkout master 
$ git merge maint 

Kết quả:

tag:feature-rel v1.0--+       +--master 
         |       | 
       (c1)->(c2)->(c)->(c)->(c)->(c)->(c100) 
         |      /
         +->(c)->(c)->(c50)-----' 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

Tiếp theo thời gian :

       +--master 
           | 
           +--tag:feature-rel v2.0 
           | 
    ...->(c)->(c100)->(c101)->(c102) 
      /
...->(c50)---' 
     | 
     +--maint 
     | 
     +--tag:maint-rel v1.0.1 

Và vào thời điểm này, tôi có vài câu hỏi:

  1. Phải làm gì với "Maint" chi nhánh? Tôi hiểu con trỏ "maint" nên được di chuyển ở vị trí giống như "master"? Làm sao ?
  2. Sau đó làm thế nào để tạo một nhánh của nhánh "maint" từ nhánh "master"?
  3. Nếu xuất hiện một bản vá (trôi qua một thời gian rất dài, ví dụ, bản phát hành tính năng hiện tại v10.0) cho thẻ "cũ: maint-rel v1.0.1", cách tích hợp nó trong "maint" và trong "master"?

Cảm ơn.

Trả lời

3

làm thế nào để mantain các phiên bản cũ mà không cần tạo một tồn tại lâu dài riêng chi nhánh

chi nhánh bảo trì được thường được thực hiện mỗi phiên bản, và tồn tại lâu dài, vì họ phục vụ để sửa chữa lỗi cụ thể để phát hành đó, và không phải tất cả mọi thứ cần phải được sáp nhập trở lại vào sự phát triển hiện tại.

1/Làm gì với nhánh "maint"? Tôi hiểu con trỏ "maint" nên được di chuyển ở vị trí giống như "master"? Làm sao ?

Tôi không chắc chắn lý do bạn sẽ sử dụng lại việc duy trì tại đây. một rebase sẽ không hoạt động.
Có thể là một

$ git checkout maint 
$ git reset --merge c102 

Từ 'Maint' đã được sáp nhập vào tổng thể, tôi đoán reset này sẽ không cập nhật bất kỳ tập tin mới hơn trong tổng thể.

tôi chỉ thử nghiệm nó:

alt text http://img188.imageshack.us/img188/4425/resetmerge.png

Nó di chuyển các HEAD của 'Maint', mà không cần chạm vào bất kỳ tập tin trong tổng thể.

2/Sau đó làm thế nào để tạo một nhánh của nhánh 'maint' từ nhánh 'master'?

Vâng việc đặt lại sẽ di chuyển đầu của 'maint' sang sự phát triển hiện tại: nếu C102 là v2, tất cả những gì bạn cần là thanh toán 'maint' và bạn sẽ ngã ba ngay lập tức.

Điều đó sẽ cung cấp cho bạn:

alt text http://img36.imageshack.us/img36/91/resetmerge2.png

3/nếu xuất hiện một bản vá (trôi qua một thời gian rất dài, ví dụ, hiện tại tính năng giải phóng v10.0) cho thẻ cũ" : maint-rel v1.0.1 ", cách tích hợp nó trong" maint "và" master "?

Ở đó bạn cần phải tạo ra một "chi nhánh duy trì tên":

$ git checkout -b maint-1.0 c50 
$ # work on patch 
$ git checkout maint 
$ git cherry-pick ... # only merge what you need in maint 
$ git checkout master 
$ git cherry-pick ... # only merge what you need in maint 

Lưu ý: bạn có thể muốn không sáp nhập được điều tương tự trong Maint (mà vẫn có thể cần một số phần của việc sửa chữa thực hiện trong Maint -1.0) và chủ (có thể đã phát triển quá nhiều đến nỗi hầu hết các bản vá không còn liên quan nữa)

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