Hủy tất cả và nhận bản sao sạch nhất của phiên bản mới nhất?


159

Tôi đang chuyển một quá trình xây dựng để sử dụng đồng bóng và muốn đưa thư mục làm việc trở lại trạng thái sửa đổi mẹo. Các quá 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ữ.

Cách dễ nhất để loại bỏ tất cả những thứ đó và có được một thư mục làm việc sạch sẽ có phiên bản mới nhất?

Hiện tại 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 có vẻ như nên có một cách đơn giản hơn.

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


1
Là "(xóa nội dung ...)" một nhận xét cho lệnh "Revert --all" hoặc một bước bạn thực hiện? Tôi hỏi vì "hg update" sẽ chỉ cập nhật các tập tin đã 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á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 mẹo. Tại sao không hg revert --allđủ để quay lại trạng thái thư mục làm việc nhất quán trước khi kéo và cập nhật?
Lasse V. Karlsen

đó 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 sử dụng xóa dòng lệnh, nhưng không.)
Rory

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

Câu trả lời:


212

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

hg pull
hg update -r MY_BRANCH -C

Các -Clá cờ nói với lệnh update để 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 tin chưa được theo dõi trong kho lưu trữ của bạn. Có vẻ như bạn cũng muốn loại bỏ những thứ đó, vì vậy tôi sẽ sử dụng purgetiện ích mở rộng cho điều đó:

hg pull
hg update -r MY_BRANCH -C
hg purge

Trong mọi trường hợp, không có một lệnh nào bạn có thể yêu cầu Mercurial thực hiện sẽ thực hiện mọi thứ bạn muốn ở đây, ngoại trừ nếu bạn thay đổi quy trình thành phương pháp "nhân bản đầy đủ" mà bạn nói bạn không thể làm.


6
Cảm ơn, đó là 'cuộc thanh trừng' mà tôi cần. Bản cập nhật -C không thoát khỏi các tệp không bị theo dõi, đó là điều chính tôi đang vật lộn với.
Rory

4
Bạn cũng có thể sử dụng TortoiseHg để thanh 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

18
Nếu tiện ích mở rộng thanh lọc không được kích hoạt, bạn cũng có thể sử dụng lệnh như thế này: hg --config "extensions.purge=" purge --all
Samuel Delisle

5
@ csharptest.net hg purge --allchỉ khiến tôi đau đầu, vì nó cũng xóa các cấu hình cục bộ của tôi, tức là: người dùng cơ sở dữ liệu / mật khẩu, v.v. :)
VMC

@SamuelDelisle cảm ơn bạn tốt, tôi không muốn thực hiện bất kỳ thay đổi cấu hình nào chỉ cho lệnh một lần này trong tập lệnh của tôi!
joonas.fi

113
hg up -C

Điều này sẽ loại bỏ tất cả các thay đổi và cập nhật lên phần đầu mới nhất trong nhánh hiện tại.

Và bạn có thể bật tiện ích mở rộng thanh lọc để có thể xóa tất cả các tệp không đảo ngược.


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

7
@Rory: không, hg purgelà cho các tập tin không đảo ngược.
zerkms

10

Để xóa không bị theo dõi trên * nix mà không có phần mở rộng thanh lọc, bạn có thể sử dụng

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

Mà đang sử dụng

cập nhật -r --rev sửa đổi REV

update -C - xóa bỏ các thay đổi không được cam kết (không sao lưu)

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

status -n --no-status ẩn trạng thái tiền tố


4

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

Bản thân tôi khó có thể nhớ các dòng lệnh cho tất cả các công cụ của mình, vì vậy tôi có xu hướng thực hiện bằng UI:


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

Cam kết

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

Hiển thị các tập tin bị bỏ qua

3. Bây giờ, chọn tất cả chúng và nhấp vào "Xóa Unversioned".

Xóa chúng

Làm xong. Đó là một thủ tục dễ nhớ hơn nhiều so với công cụ dòng lệnh.


Tôi không chắc chắn (bản thân tôi sử dụng SourceTree), nhưng những ảnh chụp màn hình này dường như là từ Rùa WorkHench. Nói chung, tôi nghĩ các giải pháp dựa trên UI 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, "giấu chúng" nghe có vẻ hơi mơ hồ đối với tôi.
Jon Coombs

3

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.

Thông thường tôi muốn thoát khỏi các tập tin bị bỏ qua và không được đảo ngược, vì vậy:

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

Và sau đó làm theo:

hg update -C -r xxxxx

trong đó đặt tất cả các tệp được phiên bản ở trạng thái phù hợp để sửa đổi xxxx


Để theo truyền thống Stack Overflow nói với bạn rằng bạn không muốn làm điều này, tôi thường thấy rằng "Tùy chọn hạt nhân" này đã phá hủy thứ tôi quan tâm.

Cách đúng đắn để làm điều đó là có một 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ự sạch sẽ' và 'làm cho rõ rà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.