2009-07-08 56 views
294

Tôi muốn thủy ngân loại bỏ một số tệp khỏi trạng thái hiện tại của kho lưu trữ. Tuy nhiên, tôi muốn các tệp tồn tại trong lịch sử trước đó.Sự khác nhau giữa hg quên và hg là gì?

Làm cách nào để forgetremove khác nhau và họ có thể làm những gì tôi muốn không?

+25

Đừng lo lắng, bạn không thể xóa tệp khỏi lịch sử trước đó trong Mercurial - lịch sử thường không thay đổi trừ khi bạn bắt đầu sử dụng tiện ích mở rộng. –

Trả lời

326

'hg forget' chỉ là viết tắt của 'hg remove -Af'. Từ 'hg remove' giúp đỡ:

... và -Af thể được sử dụng để loại bỏ các file từ phiên bản tiếp theo mà không xóa chúng khỏi thư mục làm việc.

Bottom line: 'remove' xóa các tập tin từ bản sao làm việc của bạn trên đĩa (trừ khi bạn sử dụng -Af) và 'forget' thì không.

+7

"hg quên" được giới thiệu lại trong Mercurial 1.3 là một cách dễ dàng hơn để thực hiện "hg remove -Af". Nó lên lịch xóa tệp mà không xóa nó khỏi bản sao làm việc. –

+5

Rất vui khi được nghe. 'remove -Af' (và toàn bộ bảng tùy chọn trên trang trợ giúp 'remove') là/là điên cuồng. –

+30

@ Ry4an: Nghiêm túc, nó thật lố bịch. Tôi đã đóng góp bản vá được giới thiệu lại 'quên'. Khi tôi đã làm cho nó, tôi nhận ra rằng -Af đã hoàn thành ý nghĩa trong mã nhưng từ quan điểm của người dùng nó hoàn toàn vô lý. –

26

Từ tài liệu, bạn có thể sử dụng cả hai lệnh để giữ tệp trong lịch sử dự án. Có vẻ như bạn muốn xóa, vì nó cũng xóa tệp khỏi thư mục làm việc.

Từ cuốn sách Mercurial tại http://hgbook.red-bean.com/read/:

Loại bỏ một tập tin không ảnh hưởng đến lịch sử của nó. Điều quan trọng là hiểu rằng việc xóa tệp chỉ có chỉ có hai hiệu ứng. Nó xóa phiên bản hiện tại của tệp từ thư mục làm việc . Nó dừng Mercurial từ việc theo dõi các thay đổi đối với tệp, từ thời điểm cam kết tiếp theo. Xóa tệp không theo bất kỳ cách nào thay đổi lịch sử của tệp.

Các hg trang người đàn ông (1) nói này về quên:

Đánh dấu các file được chọn vì vậy họ sẽ không còn được theo dõi sau khi tiếp cam kết. Thao tác này chỉ xóa các tệp khỏi chi nhánh hiện tại, không phải từ toàn bộ lịch sử dự án và nó không xóa chúng khỏi thư mục làm việc .

Và đây về loại bỏ:

Schedule các tập tin chỉ định cho loại bỏ từ kho. Điều này chỉ xóa các tệp khỏi chi nhánh hiện tại, không phải từ toàn bộ lịch sử của dự án.

37

Cách tốt nhất để đặt là hg forgetgiống hệt-hg removetrừ mà nó để lại các file sau trong bạn bản sao làm việc. Các tệp bị bỏ lại phía sau dưới dạng tệp không được theo dõi và hiện có thể được bỏ qua tùy chọn bằng mẫu trong .hgignore.

Nói cách khác, tôi không thể cho biết nếu bạn sử dụng hg forget hoặc hg remove khi tôi lấy từ bạn. Tệp mà bạn chạy hg forget trên sẽ sẽ bị xóa khi tôi cập nhật thành thay đổi đó - giống như khi bạn đã sử dụng hg remove thay thế.

3

Nếu bạn sử dụng "hg remove b" chống lại một tập tin với "A" trạng thái, có nghĩa là nó đã được bổ sung nhưng không cam kết, Mercurial sẽ trả lời:

not removing b: file has been marked for add (use forget to undo) 

Phản ứng này là một giải thích rất rõ ràng về sự khác biệt giữa loại bỏ và quên.

Hiểu biết của tôi là "hg forget" là để hoàn tác tệp đã thêm nhưng không được cam kết sao cho nó không được theo dõi bởi kiểm soát phiên bản; trong khi "hg remove" dùng để lấy tệp đã cam kết khỏi kiểm soát phiên bản.

thread có ví dụ về cách sử dụng hg remove đối với các tệp thuộc 7 loại trạng thái khác nhau.

1

Một tập tin có thể được theo dõi hay không, bạn sử dụng hg thêm để theo dõi một tập tin và hg loại bỏ hoặc hg quên để bỏ theo dõi nó. Sử dụng hg xóa mà không cần cờ cả hai đều sẽ xóa tệp và bỏ theo dõi nó, hg quên sẽ chỉ đơn giản là bỏ theo dõi nó mà không xóa nó.

+3

Tôi không biết tại sao bạn cảm thấy cần phải thêm báo giá này khi người đàn ông tự mình đã lên đường, nhưng hey, bất cứ điều gì nổi thuyền của bạn. –

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