Đây là hành vi được thiết kế bởi các tác giả Mercurial: hãy tưởng tượng rằng bạn đã thực hiện các thay đổi không được cam kết trong bản sao làm việc, chúng tôi không muốn hg import
tự động áp dụng bản vá và cam kết cả thay đổi và bản vá của bạn thay đổi với thông báo nhật ký sai và cả hai thay đổi bị vướng vào nhau.
Đây là lý do tại sao hg help import
nói:
Because import first applies changes to the working directory, import will
abort if there are outstanding changes.
lệnh Việc nhập khẩu được nhiều hơn cho nhập khẩu changesets (với metedata khi dữ liệu đến từ hg export
) so với các bản vá lỗi chỉ áp dụng. Nếu bạn có thay đổi của riêng bạn trong bản sao làm việc, bạn có thể ví dụ vẫn sử dụng hg import --bypass
và không có lỗi nào xảy ra ở đó vì cam kết được áp dụng trực tiếp cho kho lưu trữ chứ không phải bản sao làm việc. (Lưu ý: nhưng sau đó nếu bạn chỉ cam kết thay đổi của bạn, bạn sẽ nhận được hai đầu, rằng bạn sẽ cần phải hợp nhất .. :-).
Giải pháp với dòng lệnh cho hệ thống Unix là sử dụng lệnh patch
trực tiếp thay vì hg import
vì sau đó không kiểm tra sửa đổi cục bộ sẽ được thực hiện. Ví dụ:
for i in 1 2 etc.
do
patch -p1 < patch$i.diff
done
hg commit ...
Đối với phi Unix hệ thống bạn cũng có thể có một giải pháp Mercurial tinh khiết bằng cách cài đặt phần mở rộng shelve
, cho phép nó trong tập tin cấu hình toàn cầu của bạn (mercurial.ini), và sau đó sử dụng shelve
để xử lý thao tác trộn một bản vá sau khi khác:
hg import --no-commit patch1.diff
hg shelve
hg import --no-commit patch2.diff
hg unshelve
etc.
Nếu bao giờ một cuộc xung đột có thể xảy ra, shelve
sẽ phát hiện nó và bạn sẽ phải giải quyết sau đó nó nói shelve
rằng nó được giải quyết với các tùy chọn --continue
.
Hy vọng nó sẽ hữu ích.
Nguồn
2014-10-24 09:50:58
Về lệnh 'patch': Tôi không có tiện ích trong thư mục thủy tinh (cửa sổ), bạn đang nói về' hg patch'? Nếu vậy tôi đã thử nó trước khi hỏi câu hỏi SO này và nó chỉ báo cáo thông báo lỗi giống như 'hg import' – tigrou
Nó có vẻ là một tiện ích' Linux', có thể cài đặt 'cygwin' sẽ làm cho nó hoạt động. – tigrou
Tôi không nhận ra bạn đã không sử dụng Unix, có 'patch' là một tiện ích Unix. Bạn có thể: sử dụng phiên bản Cygwin, sử dụng bản sao như bạn đã đề cập, hoặc tôi nghĩ bạn có thể có giải pháp "thuần-hg", tôi sẽ thêm nó vào câu trả lời của tôi ..;) –