2012-01-16 39 views
5

Tôi có một ứng dụng là phiên bản 1.0. Bây giờ tôi cần phải bắt đầu làm việc trên phiên bản 2.0 nhưng đồng thời duy trì và sửa lỗi trong phiên bản 1.0.Quy trình làm việc với hai phiên bản của một dự án trong Mercurial

Sửa lỗi từ 1.0 sẽ được hợp nhất vào bản phát hành 2.0 nhưng không có chức năng mới nào sẽ được trả lại từ bản phát hành 2.0 thành 1.0.

Tôi hiểu cách các nhánh hoạt động tuy nhiên tôi cần có khả năng làm việc trên cả hai phiên bản cùng một lúc để chuyển đổi giữa các nhánh trong cùng một thư mục hoạt động không thực tế. Tôi muốn có thể chạy cả hai phiên bản của mã cùng một lúc.

Thiết lập điển hình hoặc quy trình làm việc để có thể làm việc trên hai phiên bản của cùng một ứng dụng bằng cách sử dụng các nhánh được đặt tên cùng một lúc là gì? tức là làm việc với một chi nhánh trong một thư mục và một chi nhánh khác trong một thư mục khác?

Tôi chỉ cần sao chép kho lưu trữ vào thư mục mới cho phiên bản 2.0 và đặt chi nhánh thành thư mục cho bản phát hành 2.0?

Tôi hơi mới đối với Mercurial vì vậy hãy tha thứ cho tôi nếu điều này có vẻ hơi ngây thơ.

+1

Hãy thử: http://nvie.com/posts/a-successful-git-branching-model/ nó nhắm vào GIT, nhưng hoạt động cho Mercurial. Nó có thể giúp giải quyết vấn đề của bạn – PostMan

+0

Tôi sẽ làm chính xác như bạn đề xuất: Có hai phiên bản được kiểm tra (nhân bản) của mã, một cho phiên bản 1.0 và một cho phiên bản 2.0. –

Trả lời

7

Tôi vừa sao chép kho lưu trữ vào thư mục mới cho phiên bản 2.0 và đặt chi nhánh thành thư mục cho bản phát hành 2.0?

Có, một bản sao riêng biệt cho mỗi bản phát hành chính sẽ ổn. Tuy nhiên, bạn nên giữ cho phát triển chính của mình on the default branch và sử dụng các nhánh được đặt tên cho mỗi bản phát hành chính. Hãy để tôi chạy qua các quy trình làm việc:

Khi phiên bản 1.0 được thực hiện, bạn làm

$ cd ~/src/foo 
$ hg tag 1.0 
$ hg push http://your-server/foo 

và sau đó bạn có thể tiếp tục làm việc trong nhân bản đối với phiên bản 2.0. Khi bạn thấy rằng bạn cần phải sửa chữa một lỗi trong 1.0, bạn làm

$ cd ~/src 
$ hg clone http://your-server/foo foo-1.x 
$ cd foo-1.x 
$ hg update 1.0 
$ hg branch 1.x 
$ hg commit -m "Starting 1.x branch" 
# now fix the bug... left as an exercise to the reader :) 
$ hg commit -m "Fixed issue123" 
# do QA to test the bugfix, make more commits as necessary 
$ hg tag 1.1 
$ hg push --new-branch 
# make a release 

Cờ --new-branch chỉ cần lần đầu tiên bạn đẩy. Nó nói với Mercurial rằng bạn thực sự muốn tạo ra một nhánh vĩnh viễn mới trong lịch sử.

Bây giờ bạn muốn kéo bugfix vào kho khác:

$ cd ~/src/foo 
$ hg pull http://your-server/foo 
$ hg merge 1.x 
$ hg commit -m "Merge with 1.1" 

Bằng cách sử dụng một named branch cho series 1.x, bạn luôn có thể sử dụng hg update 1.x đi đến changeset mới nhất về chi nhánh đó. Hãy suy nghĩ về 1.x là một "thẻ nổi" luôn trỏ đến phần thay đổi nhiều nhất trên nhánh đó.

Quy trình làm việc này được mô tả trong standard branching wiki page.

+1

+1. Có thể đáng chú ý là trong Mercurial mặc định, tôi nghĩ bạn sẽ cần 'hg push -f' để ép lực đẩy từ nhánh 1.x ... bởi vì bạn sẽ đẩy một cái đầu mới, cái mà không được phép mà không" buộc " .Trong một dòng phát triển duy nhất, người đứng đầu bổ sung thường sẽ được chăm sóc bằng cách hợp nhất, nhưng đó không phải là những gì muốn ở đây. – icabod

+1

@icabod: cảm ơn, tôi đã quên lá cờ '--new-branch'. Nó là một dạng được kiểm soát nhiều hơn của '-f' cho phép bạn đẩy các nhánh mới mà không cho phép bạn đẩy nhiều đầu. –

+1

Ah, tôi đã không sử dụng '--new-branch' trước đây, có thể là tôi có thói quen khó chịu khi tạo ra các nhánh vô danh, trong đó' --new-branch' dường như không hoạt động. 'Tis tốt cho các chi nhánh có tên tho'. Tôi sẽ sử dụng nó trong tương lai :) – icabod

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