2010-02-10 32 views
61

Tôi đang sử dụng Mercurial. Tôi đã tạo một bản sao của một kho lưu trữ. Để gỡ lỗi, tôi đã thay đổi một vài dòng mã trong một tệp java. Tôi đã không thực hiện những thay đổi đó. Tôi chỉ muốn quay trở lại trạng thái ban đầu của họ, như được tìm thấy trong kho lưu trữ. Tôi cố gắng hg revert filename.java, mà đã trở nó, nhưng bây giờ khi tôi làm hg status, tôi thấy tập tin bổ sung thêm vào trong thư mục của tôi bây giờ thích:Sử dụng hg hoàn nguyên trong Mercurial

? filename.java.orig 

Tôi có thể chỉ cần xóa các tập tin, và tại sao Mercurial làm cho họ khi tôi sử dụng hoàn nguyên?

Trả lời

47

Có, bạn có thể xóa chúng. Đó là một tính năng an toàn trong trường hợp bạn hoàn nguyên một cái gì đó bạn không có nghĩa là để trở lại.

5

Các tệp sao lưu này có thể được tạo để hợp nhất và hoàn nguyên các hoạt động (xem man page). Bạn có thể thêm quy tắc bỏ qua nếu bạn muốn hoặc chỉ xóa chúng nếu bạn không cần chúng nữa.

0

Đây là những điều khá phổ biến, do các hoạt động khác nhau. Một cái nhìn tại một trong những kho có kích thước vừa phải tôi làm việc trên tìm thấy 237 của chúng. Tôi không thích cách xóa những thứ mà có thể kết thúc được hữu ích, và tôi không có lý do gì để đặt tên cho file hợp pháp với các hậu tố tương tự, vì vậy tôi thêm dòng sau vào .hgignore thay vì:

.\.orig$ 
6

Đó là những bản sao của các tệp từ trước khi bạn hoàn nguyên chúng. Nếu bạn không cần những người, bạn có thể xóa chúng, hoặc bằng tay hoặc bằng cách sử dụng các Purge extension:

hg clean 
+1

Có lệnh "sạch" trong Mercurial tiêu chuẩn - có lẽ bạn đang nghĩ đến phần mở rộng thanh trừng và 'hg purge'? –

+1

@Martin: Nhập 'hg clean' nói rằng' clean' được cung cấp bởi phần mở rộng thanh lọc – Casebash

+2

Casebash: ah, right - phần mở rộng lọc cung cấp lệnh dưới cả hai tên: 'hg purge' và' hg clean'. –

8

Như của nhau đã chỉ ra, bạn có thể xóa những tập tin này một cách an toàn.

Bạn có thể loại bỏ chúng bằng cách thực hiện lệnh này từ thư mục gốc của repo của bạn:

rm `hg st -un | grep orig` 

Nếu bạn muốn trở lại, và không quan tâm chút nào về việc sao lưu các tập tin ban đầu, lệnh bạn muốn là:

hg update -C 
85

Bạn cũng có thể sử dụng cờ --no-sao lưu và các tập tin .orig sẽ không được tạo

hg revert --no-backup filename.java 

Tính đến Mercurial 2.0, bạn thay vì có thể sử dụng C cờ để ngăn chặn các file .orig từ được tạo ra

hg revert -C filename.java 
+0

Lưu một số thao tác gõ: 'hg revert -C filename.java' – jbranchaud

+0

Phím tắt -C đã được giới thiệu với mercurial 2.0 xem http://mercurial.selenic.com/wiki/WhatsNew – Fooman

+7

Tôi không chắc mình hiểu cách' - C' là viết tắt của '--no-backup' ... nó có phải là một sự trở lại của' C'ourageous? – dreamlax

23

tôi tìm ra purge extension tiện dụng. Cách sử dụng:

hg purge 

"Tiện ích mở rộng này xóa tất cả các tệp và thư mục không được theo dõi bởi Mercurial" - bao gồm tệp .orig nhưng không bao gồm tệp bị bỏ qua (trừ khi bạn sử dụng --all).

0

Tôi đã tự tạo tệp theo lô này.

IF "%1%" == "d" (
    del /s *.orig 
    del /s *.rej 
) ELSE ( 
    del /s /p *.rej 
    del /s /p *.orig 
) 

Trợ giúp: Lưu nội dung này là orig.dơi

  1. Run orig d để xóa tất cả Rejects và các tập tin orig cùng một lúc mà không cần xác nhận
  2. Run orig để xóa các tập tin có xác nhận [cơ chế an toàn]

Hy vọng điều này là hữu ích.

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