Tôi đã gặp phải một số hành vi mà tôi không mong đợi từ Subversion và phát hiện điều này gần như vô tình: Một tệp đã sửa đổi không bị gắn cờ là đã sửa đổi.Tại sao Subversion không gắn cờ tệp bảng tính Microsoft Excel đã sửa đổi?
Tôi có một bài kiểm tra đơn vị liên quan đến bảng tính Microsoft Excel dưới dạng tệp đầu vào. Phép thử đơn vị tính toán tổng kiểm tra CRC; thử nghiệm của tôi bắt đầu thất bại do việc kiểm tra thay đổi.
Tệp thử nghiệm được lưu trữ trong SVN và có loại MIME là "ứng dụng/octet-stream" và do đó được SVN coi là nhị phân.
Tôi nhận được cùng một hành vi từ TortoiseSVN và máy khách dòng lệnh SVN, trong trường hợp này cả dựa trên SVN 1.6: Khi tệp được mở trong Excel, thực tế là nó đang mở phải được mã hóa trong chính tệp đó; SVN cho thấy tệp đã được sửa đổi. Tuy nhiên, khi tệp được đóng lại (không lưu), có vẻ như nó trở về trạng thái chưa sửa đổi của nó: nghĩa là, svn status
không liệt kê tệp Excel; svn diff
không tạo đầu ra nào do dữ liệu là nhị phân.
Bắt là tệp giờ đây không được so sánh với tệp được lưu trữ trong kho lưu trữ. (Nếu một bản sao mới được xuất, nó không so sánh nhị phân với bản sao đã mở và đóng.) Tệp này dường như không thay đổi từ quan điểm của người dùng, do đó, theo nghĩa ngữ nghĩa, đáp ứng SVN là hợp lý. Nhưng không phải cú pháp; và SVN về cơ bản là cú pháp.
Phần mà tôi không thể tìm thấy lý do là tại sao SVN không gắn cờ tệp đó là đã sửa đổi. Tôi không thể tưởng tượng SVN có bất kỳ xử lý đặc biệt cho các tập tin Excel (và trong mọi trường hợp loại MIME không phải là một trong những đặc biệt liên kết với MS Excel); không có thuộc tính từ khóa SNV nào được xác định. Tương tự như vậy, tôi có thể tưởng tượng Excel biết bất cứ điều gì về nội dung của thư mục con .svn ẩn trong đó thông tin sao chép làm việc SVN được lưu trữ.
Bạn có bất kỳ manh mối nào về những gì đang diễn ra ở đây không?
Cảm ơn, Rob.
Cảm ơn. Có vấn đề là tái sản xuất. Điều này nghe có vẻ như một lời giải thích có khả năng; Tôi đã nói khá nhiều điều này trong bình luận của tôi về câu trả lời của Wim, nhưng thật tuyệt khi có nó được quan sát một cách độc lập. Tôi sẽ kiểm tra điều này (tại nơi làm việc, ngày mai). – Rhubbarb
Chỉ cần để connfirm: đó là chính xác những gì đang xảy ra. Khi tệp Excel được mở, nội dung của tệp được thay đổi (như có thể thấy với ví dụ: md5sum) và thời gian sửa đổi thay đổi. Khi tệp được đóng mà không lưu, nội dung tệp không thay đổi, nhưng không hoàn nguyên về trạng thái ban đầu của nó; và thời gian sửa đổi sẽ hoàn nguyên về giá trị trước khi mở. – Rhubbarb
Chỉ tìm thấy điều này: http://spreadsheetpage.com/index.php/oddity/who_last_opened_that_file/ có vẻ như Excel lưu tên của trình mở (và có thể nhiều hơn), ngay cả khi bạn không lưu. Kỳ dị. – Martin