2011-02-10 28 views
132

Tôi đang di chuyển một quá trình xây dựng để sử dụng mercurial và muốn để có được các thư mục làm việc trở lại trạng thái của bản sửa đổi tip. Các tiến trình xây dựng trước đó sẽ sửa đổi một số tệp và thêm một số tệp mà tôi không muốn cam kết, vì vậy tôi có các thay đổi cục bộ và các tệp không được thêm vào kho lưu trữ.Mercurial - Làm thế nào để loại bỏ tất cả các thay đổi địa phương bao gồm cả các tập tin không phiên bản?

Cách dễ nhất để loại bỏ tất cả những gì và nhận thư mục làm việc sạch sẽ có bản sửa đổi mới nhất?

Hiện nay tôi đang làm điều này:

hg revert --all 
<build command here to delete the contents of the working directory, except the .hg folder.> 
hg pull 
hg update -r MY_BRANCH 

nhưng nó có vẻ như cần có một cách đơn giản hơn.

Tôi muốn thực hiện tương đương việc xóa repo, tạo bản sao mới và cập nhật. Nhưng repo quá lớn để đủ nhanh.

+1

Là "(xóa nội dung ...)" nhận xét cho lệnh "hoàn nguyên - tất cả" hoặc bước bạn thực hiện? Tôi hỏi vì "cập nhật hg" sẽ chỉ cập nhật các tệp đã thay đổi. Nếu bạn xóa các tệp khác trước khi cập nhật, bạn sẽ không lấy lại các tệp đó trừ khi bạn cập nhật trở lại bản sửa đổi null ('hg update 00') và sau đó sao lưu vào đầu. Tại sao không phải 'hg revert --all' đủ để trở lại trạng thái thư mục làm việc phù hợp trước khi kéo và cập nhật? –

+0

đó là một bước riêng biệt được thực hiện với phần mềm xây dựng của tôi. (Tôi có thể vừa mới xóa một dòng lệnh, nhưng không.) – Rory

+1

Bạn có thể thấy lệnh 'archive' có ích trong tương lai. Ví dụ, bạn có thể 'hg archive ../ newbuild' và ảnh chụp nhanh kho lưu trữ của bạn ở' hg update' cuối cùng sẽ được đặt ở đó. Tôi thường làm điều đó để xây dựng hàng đêm chỉ vì vậy tôi không có nguy cơ làm lộn xộn repo của tôi. Chỉ cần xóa thư mục build khi bạn không còn cần đến nó nữa. –

Trả lời

172

Những bước nên có thể được rút ngắn xuống:

hg pull 
hg update -r MY_BRANCH -C 

Cờ -C nói lệnh cập nhật để loại bỏ tất cả thay đổi địa phương trước khi cập nhật.

Tuy nhiên, điều này vẫn có thể để lại các tệp không được theo dõi trong kho lưu trữ của bạn. Có vẻ như bạn muốn thoát khỏi những người là tốt, vì vậy tôi sẽ sử dụng phần mở rộng purge cho rằng:

hg pull 
hg update -r MY_BRANCH -C 
hg purge 

Trong mọi trường hợp, không có duy nhất một lệnh bạn có thể hỏi Mercurial để thực hiện điều đó sẽ làm mọi thứ bạn muốn ở đây, trừ khi bạn thay đổi quy trình thành phương thức "sao chép toàn bộ" mà bạn nói bạn không thể làm được.

+5

Cảm ơn, đó là 'thanh trừng' mà tôi cần. Bản cập nhật -C không loại bỏ các tệp không được theo dõi, đó là điều chính mà tôi đang gặp phải. – Rory

+12

+1 cho "hg purge --all" –

+4

Bạn cũng có thể sử dụng TortoiseHg để lọc. Bạn chỉ cần bật tiện ích mở rộng trong cài đặt của bàn làm việc (hoặc chỉnh sửa mercurial.ini). – Dave

90
hg up -C 

Thao tác này sẽ xóa tất cả thay đổi và cập nhật lên đầu mới nhất trong nhánh hiện tại.

Và bạn có thể bật purge extension để có thể xóa tất cả các tệp không phiên bản.

+0

Điều đó có bao gồm các tệp không được theo dõi không? Tôi đã có một số vấn đề với những người trong các lệnh khác tôi đã cố gắng. Tôi sẽ thử ngay bây giờ ... – Rory

+6

@Rory: nope, 'hg purge' là dành cho các tập tin không phiên bản. – zerkms

9

Để xóa untracked trên * nix mà không có phần mở rộng thanh trừng bạn có thể sử dụng

hg pull 
hg update -r MY_BRANCH -C 
hg status -un|xargs rm 

nào đang sử dụng

update -r --rev REV sửa đổi

cập nhật C - xóa sạch các thay đổi không được cam kết (không sao lưu)

trạng thái -u --unknown chỉ hiển thị các tệp không xác định (không được theo dõi)

tình trạng -n --no-tình trạng tình trạng giấu tiền tố

3

Nếu bạn đang tìm kiếm một phương pháp đó là dễ, sau đó bạn có thể muốn thử này.

Tôi cho bản thân mình khó có thể nhớ commandlines cho tất cả các công cụ của tôi, vì vậy tôi có xu hướng để làm điều đó bằng cách sử dụng giao diện người dùng:


1. Đầu tiên, chọn "cam kết"

Commit

2. Sau đó, hiển thị các tệp bị bỏ qua. Nếu bạn có những thay đổi không được cam kết, hãy ẩn chúng.

Show ignored files

3. Bây giờ, chọn tất cả trong số họ và bấm vào nút "Xóa không phiên bản".

Delete them

Xong. Đó là một thủ tục dễ nhớ hơn các công cụ dòng lệnh.

+0

Tôi không chắc chắn (tôi sử dụng SourceTree bản thân mình), nhưng những ảnh chụp màn hình này xuất hiện từ TortoiseHg Workbench. Nói chung, tôi nghĩ rằng các giải pháp dựa trên giao diện người dùng là hữu ích, nhưng câu trả lời này cần ghi nhãn tốt hơn. Ngoài ra, "ẩn chúng" âm thanh hơi mơ hồ với tôi. –

2

trạng thái hg sẽ hiển thị cho bạn tất cả các tệp mới và sau đó bạn chỉ có thể rm chúng.

Bình thường, tôi muốn thoát khỏi các tập tin bị bỏ qua và không phiên bản, vì vậy:

hg status -iu       # to show 
hg status -iun0 | xargs -r0 rm   # to destroy 

Và sau đó làm theo điều đó với:

hg update -C -r xxxxx 

trong đó đặt tất cả các file phiên bản trong trạng thái phù hợp với phiên bản xxxx


Để theo dõi truyền thống Ngăn xếp ngăn xếp cho bạn biết rằng bạn không muốn kiến để làm điều này, tôi thường thấy rằng "Lựa chọn hạt nhân" này đã phá hủy những thứ tôi quan tâm.

Cách đúng đắn để làm điều đó là có tùy chọn 'làm sạch' trong quá trình xây dựng của bạn, và có thể là 'làm cho thực sự bẩn thỉu' và 'làm ô uế' quá.

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