2010-01-20 24 views
7

Vì vậy, ngay bây giờ tôi đang học Ruby on Rails, và tôi đang làm việc thông qua cuốn sách "Agile Web Development with Rails". Tôi cũng đã quyết định rằng tôi muốn cung cấp cho Mercurial một đi, bởi vì tôi đã đọc lên trên phân phối của SCM, và nó có vẻ như một tình huống lý tưởng. Tôi vẫn còn, tuy nhiên, thích để đẩy mã của tôi từ xa để Linux VPS của tôi chỉ trong ổ cứng của tôi quyết định đi lặn.Phân nhánh với Mercurial SCM

Vì vậy, câu hỏi của tôi dành riêng cho phân nhánh trong Mercurial. Ngay bây giờ tôi đã có một kho lưu trữ từ xa được thiết lập và tôi có thể đẩy các thay đổi qua SSH dễ dàng (địa ngục tôi thậm chí thiết lập một trang web Nginx FastCGI cho phép tôi đẩy, quá). Những gì tôi muốn làm, tuy nhiên, là tạo ra các chi nhánh cho mỗi chương như tôi làm việc trên chúng, vì vậy tôi có thể giữ một lịch sử tổ chức tốt đẹp của sự tiến bộ của tôi thông qua cuốn sách. Vì vậy, đây là những gì tôi đang làm:

 
$ hg branch chapter-10 
(do chapter 10 stuff) 
$ hg commit -m "Chapter 10 complete" 
$ hg update default 
$ hg merge chapter-10 
$ hg commit -m "Merging chapter 10 into default" 
$ hg push 

Khi tôi thực hiện các tuyên bố đẩy, tôi nhận được tin nhắn này từ Mercurial:

 
pushing to ssh://myserver/hg/depot 
searching for changes 
abort: push creates new remote branch 'chapter-10'! 
(did you forget to merge? use push -f to force) 

Vì vậy, tại thời điểm này tôi cố gắng làm một hg merge một lần nữa, và nó nói với tôi không có gì để hợp nhất, điều này rõ ràng là sự thật bởi vì tôi vừa sáp nhập nó. Khi tôi ép buộc bằng -f, mọi thứ có vẻ ổn, và thậm chí giao diện web cũng hiển thị các nhánh thích hợp.

Tóm lại, câu hỏi của tôi rất đơn giản: Tôi có làm đúng cách không? Có cách nào phù hợp hơn để thực hiện điều này với Mercurial (tức là "Mercurial way") không? Thành thật mà nói, tôi chỉ muốn kho lưu trữ để phục vụ như một bản sao lưu. Tôi là một fan hâm mộ của mô hình SCM phân tán, nhưng với tôi nó cảm thấy sorta "bẩn" để buộc đẩy. Bất kỳ cái nhìn sâu sắc nào đều được đánh giá cao! Cảm ơn trước.

+0

Mục đích của bạn: a) Để có một loạt các điểm kiểm tra công việc của bạn khi bạn làm việc theo cách của bạn thông qua các chương hoặc b) Để mở nhiều chương để chỉnh sửa đồng thời trên các nhánh khác nhau? – Tarydon

+0

Tùy chọn A là ý định của tôi ở đây, nhưng trong kịch bản nhóm, tôi có thể thấy giá trị trong Tùy chọn B cũng như –

Trả lời

6

push -f là tùy chọn phù hợp cho trường hợp của bạn và đã có cuộc thảo luận vào tháng trước để thêm lệnh đó khi cảnh báo "push creates new remote branch" này bật lên: xem issue 1513.

Tuy nhiên, issue 1974 (tháng này) đề cập đến một số hiệu ứng không mong muốn (không phải trong trường hợp của bạn).
Hãy xem số translated article này để biết thêm về cách tạo đầu thứ hai trên repo từ xa.


Trên điểm tổng quát hơn, bạn có thể sử dụng chi nhánh nếu bạn đang viết chương của bạn song song, và bạn muốn kết hợp chúng chỉ tại một số điểm (ổn định) trong thời gian

Nhưng nếu quá trình viết của bạn là tuyến tính hơn, bạn chỉ có thể sử dụng một chi nhánh và đặt một số thẻ trên đường đi.
Tuy nhiên, bạn nên quay lại chương 10 và thêm một số dòng, mặc dù bạn đã đặt thẻ 11 và 12, điều đó sẽ làm cho lịch sử khó đọc hơn.Vì vậy, các chi nhánh vẫn là một ý tưởng tốt trong trường hợp này.

+1

Cảm ơn các liên kết. Rất thông tin. Có vẻ như tôi đang cố gắng sử dụng các chi nhánh nơi thẻ sẽ phù hợp hơn. –

4

Tôi không biết về vấn đề cụ thể của bạn, nhưng từ nhận xét của bạn có vẻ như bạn sử dụng các chi nhánh nơi bạn có thể muốn sử dụng thẻ.

Chi nhánh thường được sử dụng khi nhiều người cùng hợp tác trên cùng một dự án và bạn muốn tạo một phân tách công việc để một người có thể làm việc trên một đoạn mã ổn định. Các nhánh khác được sử dụng để ổn định để giải phóng, trong khi sự phát triển đang diễn ra trong thân cây.

Thẻ (hoặc nhãn) được sử dụng để tạo chủ yếu một điểm đánh dấu có ý nghĩa quan trọng đối với phiên bản mã. Ví dụ: nếu bạn muốn đánh dấu hoàn thành chương 10, bạn chỉ cần gắn thẻ tất cả các phiên bản hiện tại bằng thẻ 'chapter-10'. Không cần phải chi nhánh. Bạn có thể chi nhánh từ một phiên bản được gắn thẻ tại bất kỳ thời điểm nào trong tương lai nếu nó cần thiết vì một số lý do.

+0

Tôi đồng ý. Cho rằng bạn luôn có thể quay trở lại và chi nhánh từ bất cứ nơi nào bạn cần, tạo ra các chi nhánh trước có vẻ giống như một trường hợp rõ ràng của YAGNI. –

2

Trong trường hợp này, tôi cảm thấy hoàn toàn ổn khi sử dụng -f để đẩy. Nó chỉ tạo ra các nhánh mới, chứ không phải đầu. Tạo đầu từ xa là một vấn đề khác hoàn toàn.

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