Làm cách nào để tải một phiên bản cụ thể của tệp trong Mercurial?


114

Tôi là người mới đến Mercurial. Chỉ không thể tìm thấy lệnh phù hợp. Đã cố gắng cập nhật / kiểm tra mà không có may mắn. Tôi đang sử dụng kho lưu trữ cục bộ. Cảm ơn


@Omnifarious: Tôi đã cam kết một phiên bản ổn định của tệp. Sau đó tiếp tục làm việc trên hồ sơ nhưng sớm nhận ra mình cần phiên bản "tốt" cuối cùng. Điều này có thể được thực hiện bằng cách cập nhật trong svn nhưng khi tôi cố gắng cập nhật hg, nó nói "0 Bức ảnh ..."
Codism

Câu trả lời:


153

Tôi nghĩ bạn muốn hg revert -r<rev> <file>(điều này sẽ thay đổi tệp đó thành như ở bản sửa đổi đã cho).


Đúng, đó chính xác là những gì anh ấy muốn. :-)
Omnifarious

9
hoặc chỉ hg Hoàn nguyên <filename> nếu bạn muốn loại bỏ những thay đổi hiện tại của bạn, và nhận được mới nhất đã cam kết
BlackTigerX

@BlackTigerX Nếu không có bản sửa đổi, tệp không được sửa đổi sẽ không được hoàn nguyên về bất kỳ thứ gì, ngay cả khi nó không phải là phiên bản được cam kết gần đây nhất. Đôi khi tôi sử dụng điều này để 'chọn quả anh đào' giữa các bản sửa đổi, vì vậy điều đó rất quan trọng.
user2864740,

83

Như djc đã nói revertthay đổi một tệp tại chỗ để phù hợp với bản sửa đổi trước. Nếu bạn không muốn nó ở đúng vị trí, bạn có thể sử dụng hg cat -r revisionid filename(tất nhiên là thay thế revisionid và tên tệp) sẽ xuất tệp ra stdout, phù hợp để chuyển hướng bất kỳ nơi nào bạn muốn.


4
hoàn hảo, chính xác những gì tôi mong ước.
yota

Thật tuyệt, thật tuyệt khi nghe những điều như vậy.
Ry4an Brase

24

hg revertthực sự giải quyết vấn đề này. Nhưng tôi nghĩ rằng bạn đang bối rối về nhiều thứ hơn là chỉ đơn giản là câu trả lời cho câu hỏi của bạn và muốn cố gắng trả lời đầy đủ hơn.

hg updatelà một lệnh toàn bộ kho lưu trữ và sẽ không hoạt động trên các tệp riêng lẻ. Nó không giống như sự lật đổ svn updatetheo cách này. Nếu bạn làm vậy, hg --help updatebạn có thể thấy rằng trường hợp này xảy ra vì lệnh không có đối số tệp. Nó có thể được sử dụng để di chuyển toàn bộ kho lưu trữ của bạn đến một ảnh chụp nhanh cụ thể, nhưng không thể được sử dụng để làm điều đó chỉ với một tệp.

Nếu bạn nhập, hg --helpbạn sẽ thấy một danh sách các lệnh. Đó là một danh sách khá lớn và hơi khó khăn, nhưng nếu bạn đọc qua nó, bạn sẽ thấy dòng này:

revert       restore individual files or directories to an earlier state

Bây giờ, nếu bạn chỉ muốn trạng thái cuối cùng cho mục đích so sánh, có một lệnh khác mà bạn có thể quan tâm, và đó là hg cat. Điều đó sẽ cho phép bạn in ra nội dung của tệp ở bất kỳ bản sửa đổi cụ thể nào. Sau đó, bạn có thể chuyển hướng đầu ra của nó thành một số tệp khác. Sau đó, bạn có thể có phiên bản tốt đã biết trước đó của tệp của mình và phiên bản cũ để so sánh song song.

Lý do tại sao Mercurial có một updatelệnh riêng biệt là nó có thể làm điều gì đó trong Mercurial mà không thể trong Subversion. Bạn có thể updatechuyển sang phiên bản cũ hơn, thực hiện thay đổi, sau đó cam kết. Điều này sẽ tạo ra một nhánh. Cácupdate lệnh có tác dụng cũng thay đổi phiên bản mẹ của thư mục làm việc hiện tại cũng như thay đổi nội dung của tất cả các tập tin trong thư mục đó với các phiên bản mà phiên bản của cha mẹ.

Điều đó có nghĩa là revertthay đổi nội dung của tệp (hoặc thậm chí toàn bộ kho lưu trữ nếu bạn cung cấp cho lệnh các đối số phù hợp) nhưng vẫn giữ nguyên bản sửa đổi gốc của bản sao làm việc hiện tại.

Bạn có thể tìm ra bản sửa đổi chính (hoặc các bản sửa đổi trong trường hợp hợp nhất) của bản sao làm việc hiện tại bằng cách sử dụng hg parents lệnh.

Trong các phiên bản Subversion là một tiến trình tuyến tính nghiêm ngặt. Mercurial tạo ra các nhánh khi chiếc mũ rơi xuống và chúng gần như dễ dàng hợp nhất. Các sửa đổi tạo thành một DAG, không phải là một tiến trình tuyến tính nghiêm ngặt.


13

Để trích xuất một bản sửa đổi cụ thể của một tệp cụ thể, bạn có thể thực hiện việc này trên Windows:

hg cat "<FileToBeExtractedPath>" -r 9 > "<ExtractionPath>"

Ở đây, 9 là số sửa đổi.

Hoặc thậm chí tốt hơn:

hg cat "<FileToBeExtractedPath>" -r 9 -o "<ExtractionPath>"

1

Đến đây để cố gắng tải phiên bản trước, vì vậy đây là lệnh chính xác:

hg revert -r .~1 <file>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.