2011-01-19 33 views
7

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.

Trả lời

3

Excel luôn khóa các tệp đang mở, đặt dấu thời gian cho ngày hiện tại. Khi bạn đóng mà không lưu, Excel sẽ hoàn nguyên dấu thời gian. Điều này làm cho SVN bỏ qua tệp.

Đối với nội dung đã thay đổi, tôi không chắc chắn. Bạn có thể tạo lại vấn đề?

+0

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

+0

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

+3

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

1

Có thể tệp bị khóa bởi excel khi nó đang mở và svn không thể truy cập tệp để xem liệu nó có thay đổi hay không?

+0

Tôi nghĩ rằng các ứng dụng MS thường chỉ khóa trong một tệp riêng biệt ẩn (giống như '~ file.doc'), nhưng tôi nghĩ Excel là khác nhau. Khóa là một đầu mối, nhưng tôi không nghĩ đó là toàn bộ câu chuyện, và tôi không truy cập mọi thứ được ngăn chặn. (Tôi cần phải thử nghiệm nhiều hơn.) – Rhubbarb

4

Subversion giả định rằng dấu thời gian "sửa đổi cuối cùng" không nằm. Nếu dấu thời gian không thay đổi, nội dung của tệp sẽ không được chọn để thay đổi. Tôi nghĩ rằng tất cả các hệ thống kiểm soát phiên bản làm điều này, kiểm tra các sửa đổi cục bộ sẽ không thể chịu được chậm nếu không.

chỉnh sửa: để biết chi tiết về cách SVN hoạt động trong lĩnh vực này, questions.c trong nguồn của thư viện bản sao làm việc SVN là một khởi đầu tốt.

+1

Chỉ cần những gì tôi đã được về để đề nghị - kiểm tra dấu thời gian :-) Tôi đã có một vài vấn đề lạ, nơi nó đã không được thiết lập đúng là đáng kể tương tự như thế này. – berry120

+0

Một lần nữa, một gợi ý tốt. Cảm ơn. Tôi nghĩ tôi đã nhìn thấy dấu thời gian được cập nhật.Tôi tự hỏi nếu Excel thay đổi dấu thời gian khi mở, nhưng thay đổi nó trở lại khi gần-không-tiết kiệm. Tôi sẽ kiểm tra lại (cẩn thận hơn) sau. – Rhubbarb

+0

Cảm ơn bạn đã liên kết trong bản chỉnh sửa của mình. – Rhubbarb

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