Làm cách nào để xóa tất cả các tệp không bị theo dõi khỏi thư mục làm việc của tôi trong Mercurial?


207

Có thể xóa tất cả các tập tin không bị theo dõi khỏi thư mục làm việc của tôi? Giả sử tôi đã thêm một loạt các tệp vào thư mục làm việc của mình, không thêm chúng qua 'hg add' và bây giờ muốn loại bỏ hoàn toàn các tệp mới đó?

Tôi đang ở trên windows, mặc dù tôi đang sử dụng PowerShell, do đó, một giải pháp kết hợp cũng có thể có ở đây.

Câu trả lời:


286

Thêm phần mở rộng Mercurial gọi là thanh trừng . Nó được phân phối bởi Mercurial.

Tiện ích mở rộng này bổ sung một lệnh thanh lọc tinh vi vào các trò chơi trên mạng và loại bỏ các tệp không được biết đến với Mercurial. tức là các tệp không bị theo dõi. Vì vậy, lệnh của bạn sẽ là,

hg purge

Nó không được bật theo mặc định, có thể để tránh vô tình xóa các tệp mà bạn quên thêm.

Để cài đặt tiện ích mở rộng này, hãy thêm tiện ích này vào tệp cài đặt đồng bóng của bạn (.hgrc trên Unix, Mercurial.ini trên Windows)

[extensions]
purge = 

Để bật tiện ích mở rộng này tạm thời, bạn có thể sử dụng

hg purge --config extensions.purge= 

26
hg purge --allsẽ xóa tất cả các tập tin không được theo dõi và bỏ qua. Điều này rất hữu ích để dọn dẹp các bản dựng trong nguồn
tacaswell

22
để bật ext tạm thời bạn có thể sử dụnghg purge --config extensions.purge=
Pykler 30/12/13

121

Cách thích hợp mà không cần thanh trừng là:

hg st -un0 | xargs -0 rm

1
@simplyharsh cách này tốt hơn hay bạn chỉ thấy nó ít hoạt động hơn là thêm phần mở rộng?
Yaakov Kuperman

3
@YaakovKuperman Tôi đoán việc thêm tiện ích mở rộng là công việc ít hơn lệnh này (cho phép một lần). Tôi không kích hoạt tính năng mở rộng thanh lọc vì tôi cần ít hơn một lần trong hai tuần. Cũng gọi tôi là ngớ ngẩn, nhưng gõ lệnh này cho tôi đủ thời gian để suy nghĩ lại trước khi làm điều gì đó mang tính mô tả như 'thanh trừng'.
đơn giản là

2
@simplyharsh, điều đó có ý nghĩa, nhưng có hai lý do tôi muốn thanh trừng tất cả giống nhau. Đầu tiên, bạn có thể thực hiện hg purge --print và xem danh sách những gì nó sẽ được loại bỏ trước khi bạn thực hiện thanh trừng. Thứ hai, nếu bạn làm theo cách này, bạn cần phải ở trong gốc của repo để nó hoạt động.
Yaakov Kuperman

1
@javawizard: Đây là một cái hay khiến tôi suy nghĩ lại về cách hg hoạt động. Tuy nhiên, nó chỉ hoạt động vì rm -rf *bỏ qua các tập tin dấu chấm và thư mục dấu chấm, bao gồm .hg/. Với cùng một mã thông báo, bất kỳ dotfile nào khác (giả sử .evil-settings) cũng sẽ tồn tại và thanh lọc là tốt hơn.
dirkjot

2
Xin lưu ý rằng có một sự khác biệt trong hành vi giữa những gì 'hg st -u' và 'hg purge' tìm thấy. 'hg st -u' SILL KHÔNG tìm thấy các thư mục trống không bị theo dõi, trong khi 'hg thanh lọc' S find tìm (và xóa) chúng. Điều đó có thể hoặc không quan trọng đối với bạn.
Michael Kent

19

Cảm ơn! Điều này cũng làm việc cho tôi trong Powershell:

hg st -un | rm

2
xargs không hoạt động trong powershell - đây là câu trả lời duy nhất nằm ngoài hộp "thân thiện với cửa sổ"
Nikos Athanasiou

đồng ý ... thứ hai về xargs không hoạt động trong powershell ... tuy nhiên, thanh trừng vẫn là một lựa chọn khả thi
beauXjames

Làm việc cho tôi :)
Naveen Kumar V

4
rm $(hg st -u)

... Trong đó -u là viết tắt của "không bị theo dõi", bạn cũng có thể chọn trạng thái khác.


4

Bạn có thể dùng

hg purge --all

để loại bỏ tất cả các tập tin bị bỏ qua và không bị theo dõi

(trước tiên bạn cần cài đặt phần mở rộng thanh lọc như được giải thích trong một số câu trả lời)



2

Cái này cần phải dùng mẹo:

hg status | grep '^\?' | sed 's/^\? //' | xargs rm -rf

2

nếu bạn không muốn sử dụng thanh trừng:

rm $(hg st | grep ^? | awk '{print $2}')

0

Giả sử rằng bạn đang sử dụng hệ thống * nix, bạn có thể chạy một cái gì đó như thế này:

rm `hg st | awk '/\?/ {print $2}'`

từ gốc của kho lưu trữ đồng bóng.

Tôi không biết một lệnh đồng bóng tiêu chuẩn để đạt được điều tương tự nhưng tôi tin rằng có nhiều tùy chọn dòng lệnh hơn để làm điều này. Tôi chắc chắn có những giải pháp "tốt hơn" và sẽ rất thích nghe bất kỳ đề xuất nào khác.

Vui lòng sử dụng lệnh này một cách thận trọng vì nó không được kiểm tra kỹ lưỡng.

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.