2010-06-10 5 views
12

Cửa hàng Subversion xem xét chuyển sang Mercurial, cố gắng tìm hiểu trước tất cả các khiếu nại của nhà phát triển sẽ là gì. Có một trường hợp sử dụng khá phổ biến ở đây mà tôi không thể thấy cách xử lý.Thực hiện mà không cần cam kết một phần "Mercurial way"

  1. Tôi đang nghiên cứu một số tính năng lớn thậm chí không biên dịch.
  2. Yêu cầu sửa lỗi khẩn cấp đến. Bản sửa lỗi rất đẹp và cục bộ và không chạm vào bất kỳ mã nào mà tôi đang thực hiện.
  3. Tôi sửa chữa bản sao làm việc của mình.

Bây giờ những gì?

Tôi đã xem "Mercurial cherry picking changes for commit" và "best practices in mercurial: branch vs. clone, and partial merges?" và tất cả các đề xuất dường như là các phần mở rộng có độ phức tạp khác nhau, từ Ghi và xếp vào hàng đợi.

Thực tế là dường như không có bất kỳ chức năng cốt lõi nào cho điều này khiến tôi nghi ngờ rằng theo một nghĩa nào đó, phong cách làm việc này là Làm điều đó sai. Một giải pháp giống như Mercurial cho trường hợp sử dụng này trông như thế nào?


Edited thêm: git, ngược lại, dường như được thiết kế cho công việc này: git add các tập tin Sửa lỗi, không git add bất cứ thứ gì (hoặc bất cứ điều gì git reset HEAD bạn có thể đã gia tăng), git commit.

+0

Các nhánh và hàng đợi địa phương ngắn ngủi đều chắc chắn là "chức năng cốt lõi". Việc thiếu một tùy chọn "xác nhận" trong trường hợp này chỉ nên được hiểu là một sự xác nhận của nhiều kiểu làm việc, và không phải là loại bỏ bất kỳ kiểu nào. –

+0

Bạn cũng nên xem [Cách dễ nhất để cam kết và đẩy một tệp duy nhất] là gì (http://stackoverflow.com/questions/125272/using-mercurial-whats-the-easiest-way-to-commit-and- push-a-single-file-while-le) – Casebash

Trả lời

6

Rất nhiều chức năng hữu ích cho Mercurial được cung cấp dưới dạng tiện ích mở rộng - đừng ngại sử dụng chúng.

Đối với câu hỏi của bạn, record cung cấp những gì bạn gọi là một phần cam kết (nó cho phép bạn chọn những khối thay đổi bạn muốn cam kết). Mặt khác, shelve cho phép tạm thời làm cho bản sao làm việc của bạn sạch sẽ, đồng thời giữ các thay đổi cục bộ. Khi bạn thực hiện sửa lỗi, bạn có thể hủy bỏ các thay đổi và tiếp tục làm việc.

Cách kinh điển để thực hiện việc này (tức là chỉ sử dụng lõi) có thể là tạo bản sao (lưu ý rằng các bản sao cục bộ có giá rẻ như các liên kết cứng được tạo thay vì bản sao).

+1

Không ngại sử dụng các phần mở rộng, nhưng ngại sử dụng các phần mở rộng như một cách để tránh thay đổi suy nghĩ của tôi. Tôi đoán tôi cần phải tìm một cách để làm cho bản sao địa phương như giá rẻ cho IDE như họ đang cho hệ thống tập tin ... –

+1

'hg record' ~ =' git commit -i' và 'hg shelve' ~ =' git stash' –

3

Bạn sẽ sao chép kho lưu trữ (ví dụ: tạo chi nhánh sửa lỗi trong các điều khoản SVN) và thực hiện sửa chữa từ đó.

Hoặc nếu nó thực sự là một sửa chữa nhanh, bạn có thể sử dụng tùy chọn -I cam kết kiểm tra rõ ràng từng tệp riêng lẻ.

+0

Điểm tốt về -I. Trên thực tế, bây giờ tôi đang nhìn vào trang người đàn ông hg, thay vì chỉ than phiền phàn nàn từ những người đã được hướng dẫn lướt, tôi không chắc chắn hành vi cam kết là khác nhau từ svn như tôi nghĩ. –

+1

Tùy chọn '-I' thậm chí không cần thiết, bạn có thể thực hiện' hg commit foo.c bar.h'. Tôi thấy các tùy chọn '-I' và' -X' là thứ bạn sử dụng nếu bạn muốn làm các bộ lọc bao gồm/loại trừ ưa thích. Cá nhân tôi không bao giờ sử dụng chúng kể từ khi vỏ của tôi có thể làm globbing cần thiết cho tôi. –

3

Giống như bất kỳ DVCS nào, phân nhánh là bạn của bạn. Phân nhánh một kho chứa nhiều cách là bánh mì và bơ của hệ thống này. Dưới đây là một số git model bạn có thể xem xét việc áp dụng nó hoạt động khá tốt với Mercurial.

+0

Vâng, tôi có cảm giác đó sẽ là câu trả lời. Có thể phải đợi các IDE để bắt kịp ý tưởng chuyển đổi nhanh giữa các nhánh. –

8

Đây là cách tôi sẽ xử lý các trường hợp:

  1. có một chi nhánh dev
  2. có ngành chức năng
  3. có một chi nhánh cá nhân
  4. có một chi nhánh ổn định.

Trong trường hợp của bạn, tôi sẽ cam kết thường xuyên với chi nhánh của tôi ngoài nhánh tính năng.

Khi yêu cầu đến, tôi sẽ hg up -r XYZ trong đó XYZ là số vòng quay mà chúng đang chạy, sau đó phân nhánh chi nhánh tính năng mới của số đó (hoặc up branchname, bất kỳ thứ gì).

Thực hiện công việc, sau đó nhập vào nhánh ổn định sau khi thử nghiệm.

Chuyển về công việc của tôi và hợp nhất từ ​​nút cam kết chi nhánh trên cùng của tính năng, do đó tích hợp hai luồng nỗ lực.

+0

Điều đó có ý nghĩa. –

1

Ngoài what Santa said về phân nhánh là bạn của bạn ...

cam nhỏ granularity là bạn của bạn. Thay vì thực hiện nhiều thay đổi mã trong một cam kết đơn lẻ, hãy thực hiện từng thay đổi mã độc lập trong cam kết của chính nó. Sau đó, sẽ dễ dàng hơn nhiều để thay đổi lựa chọn anh đào để hợp nhất giữa các nhánh.

1

Không sử dụng Mercurial mà không sử dụng Mq Extension (nó được đóng gói sẵn trong cài đặt mặc định). Ngoài việc giải quyết vấn đề cụ thể của bạn, nó giải quyết rất nhiều vấn đề chung khác và thực sự nên là cách mặc định mà bạn làm việc (đặc biệt nếu bạn đang sử dụng một IDE không tích hợp trực tiếp với Hg, làm cho các nhánh chuyển đổi nhanh chóng một cách làm việc khó khăn).