Tôi muốn mercurial xóa 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 tin tồn tại trong lịch sử trước đó.
Làm thế nào forget
và remove
khác nhau, và họ có thể làm những gì tôi muốn?
Tôi muốn mercurial xóa 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 tin tồn tại trong lịch sử trước đó.
Làm thế nào forget
và remove
khác nhau, và họ có thể làm những gì tôi muốn?
Câu trả lời:
' hg forget
' Chỉ là viết tắt cho ' hg remove -Af
'. Từ hg remove
trợ giúp '':
... và -Af có thể được sử dụng để xóa các tệp khỏi phiên bản tiếp theo mà không xóa chúng khỏi thư mục làm việc.
Dòng dưới cùng: ' remove
' xóa tệp khỏi bản sao làm việc của bạn trên đĩa (trừ khi bạn sử dụng -Af
) và ' forget
' không.
Cách tốt nhất để đưa là hg forget
là giống hệt nhau để hg remove
trừ 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 dưới dạng các tệp không bị theo dõi và bây giờ có thể tùy ý bỏ qua với một mẫu trong .hgignore
.
Nói cách khác, tôi không thể biết bạn đã sử dụng hg forget
hay hg remove
khi tôi rút từ bạn. Một tập tin mà bạn chạy hg forget
trên sẽ bị xóa khi tôi nâng cấp lên changeset đó - cũng giống như khi bạn đã sử dụng hg remove
để thay thế.
Từ tài liệu này, rõ ràng bạn có thể sử dụng một trong 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/ :
Xóa một tập tin không ảnh hưởng đến lịch sử của nó. Điều quan trọng là phải hiểu rằng việc xóa một tệp chỉ có hai tác dụng. Nó loại bỏ phiên bản hiện tại của tập tin khỏi thư mục làm việc. Nó ngăn Mercurial theo dõi các thay đổi đối với tệp, kể từ thời điểm cam kết tiếp theo. Loại bỏ một tập tin không làm thay đổi lịch sử của tập tin.
Trang người đàn ông hg (1) nói điều này về việc quên:
Đánh dấu các tệp đã chỉ định để chúng sẽ không còn được theo dõi sau lần xác nhận tiếp theo. Điều này chỉ xóa các tệp khỏi nhánh hiện tại, không phải trong 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à điều này về loại bỏ:
Lịch trình các tập tin được chỉ định để loại bỏ khỏi kho lưu trữ. Điều này chỉ loại bỏ các tập tin từ chi nhánh hiện tại, không phải từ toàn bộ lịch sử dự án.
Nếu bạn sử dụng "hg remove b"
đối với một tệp có trạng thái "A", có nghĩa là nó đã được thêm nhưng không được cam kết, Mercurial sẽ trả lời:
not removing b: file has been marked for add (use forget to undo)
Phản hồi 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 "hg forget"
là để hoàn tác một tệp được thêm nhưng không được cam kết để nó không bị theo dõi bởi kiểm soát phiên bản; trong khi đó "hg remove"
là để lấy ra một tập tin cam kết từ kiểm soát phiên bản.
Đây chủ đề có một ví dụ cho việc sử dụng hg remove
chống lại các file của 7 loại khác nhau của trạng thái.
Một tập tin có thể được theo dõi hoặc không, bạn sử dụng hg add để theo dõi một tập tin và hg xóa hoặc hg quên để theo dõi nó. Sử dụng hg remove mà không có cờ sẽ xóa cả tập tin 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ó.