2012-01-17 39 views
5

Tôi đã tạo một kho lưu trữ trong thư mục của dự án. Tôi đã thêm tất cả các tệp và thực hiện một số cam kết. Sau đó, tôi đã thêm các tệp mới vào dự án và lưu trữ. Sau đó tôi trở về phiên bản cũ và bây giờ tôi không thể cập nhật lên phiên bản trước. Sau hg update tip Tôi nhận được thông báo này:Làm thế nào để cập nhật lên phiên bản mới nhất trong mercurial sau khi thêm tập tin mới?

abort: untracked file in working directory differs from file in requested 
revision: '.DS_Store' 

Tôi mới dùng để bảo trợ. Làm thế nào tôi có thể sửa lỗi này?

Trả lời

12

Điều đó có nghĩa là Mercurial không chắc chắn về những việc cần làm. Bạn có tệp có nội dung something trong bản sao làm việc. Tệp không phải là phiên bản được kiểm soát, vì vậy Mercurial thường sẽ để nó một mình khi bạn cập nhật. Tuy nhiên, sửa đổi bạn đang cập nhật thành cũng có tệp có cùng tên và nội dung khác từ số something bạn đã có trong tệp.

Bạn có thể nhận vấn đề này nếu bạn làm

$ hg init 
$ echo "a file" > a 
$ hg add a 
$ hg commit -m "added a" 
$ echo "b file" > b 
$ hg add b 
$ hg commit -m "added b" 

Bây giờ bạn có hai phiên bản, mới nhất có file ab. Nếu bạn cập nhật trở lại với phiên bản đầu tiên và tạo ra một tập tin khác nhau b, sau đó bạn sẽ có được rắc rối:

$ hg update 0 
$ echo "other b file" > b 
$ hg update 
abort: untracked file in working directory differs from file in requested 
revision: 'b' 

Các giải pháp bình thường là cam kết trước cập nhật. Bạn thường không nên cập nhật với một bản sao làm việc bẩn ("bẩn" có nghĩa là hg status không có sản phẩm nào). Mercurial không hỗ trợ các bản cập nhật như vậy, nhưng bạn chỉ nên sử dụng chúng nếu bạn biết bạn đang làm gì.

Vì vậy, để tiếp tục ví dụ trên chúng ta có thể hoặc là cam kết mới b và sau đó hợp nhất:

$ hg add b 
$ hg commit -m "added new b" 
$ hg merge 

này cho một cuộc xung đột trong b kể từ khi hai phiên bản chứa b fileother b file, tương ứng. Giải quyết xung đột và cam kết:

$ hg commit -m "merged two bs" 

Cách khác là xóa tệp khỏi bản sao làm việc. Đó là những gì tôi sẽ làm trong trường hợp của bạn:.DS_Store tệp không được theo dõi ngay từ đầu. Chúng lưu trữ một số thông tin thư mục trên Mac OS X và đây không phải là một phần của mã nguồn của bạn. Vì vậy, bạn làm

$ rm .DS_Store 
$ hg update 

Bản cập nhật khôi phục tệp .DS_Store. Bây giờ bạn muốn nói với Mercurial rằng nó nên ngừng theo dõi các tập tin:

$ hg forget .DS_Store 

và bạn cũng muốn nói với Mercurial để bỏ qua tập tin như vậy từ giờ trở đi:

$ echo "syntax: glob" >> .hgignore 
$ echo ".DS_Store" >> .hgignore 
$ hg commit -m "removed .DS_Store file, ignored from now on" 
+1

cảm ơn bạn rất nhiều vì câu trả lời chi tiết như vậy ! – Andrew

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