Почему Subversion не может пометить измененный файл электронной таблицы Microsoft Excel? - PullRequest
7 голосов
/ 19 января 2011

Я столкнулся с некоторым поведением, которого я не ожидал от Subversion, и обнаружил это почти случайно: измененный файл не помечается как измененный.

У меня есть модульный тест с использованием электронной таблицы Microsoft Excel в качестве входного файла. Юнит тест вычисляет контрольную сумму CRC; мой тест начал проваливаться из-за изменения контрольной суммы.

Тестовый файл хранится в SVN и имеет MIME-тип «application / octet-stream», и поэтому SVN считает его двоичным.

Я получаю то же поведение от TortoiseSVN и клиента командной строки SVN, в данном случае оба основаны на SVN 1.6: когда файл открывается в Excel, тот факт, что он открыт, должен быть закодирован в самом файле; SVN показывает, что файл изменен. Однако, когда файл снова закрывается (без сохранения), он, похоже, возвращается в свое неизмененное состояние: то есть svn status не перечисляет файл Excel; svn diff в любом случае не выводит данные из-за двоичности данных.

Подвох в том, что файл теперь не сравнивается в двоичном формате с файлом, хранящимся в хранилище. (Если экспортируется свежая копия, она не сравнивается в двоичном формате с открытой и закрытой копией.) Файл, по-видимому, не изменяется с точки зрения пользователя, поэтому в семантическом смысле ответ SVN является разумным. Но не синтаксически; и SVN по существу синтаксический.

Часть, для которой я не могу найти причину, заключается в том, что SVN не помечает файл как измененный. Я не могу себе представить, что в SVN есть какая-то особая обработка для файлов Excel (и в любом случае тип MIME не относится конкретно к типу MS Excel); не определено ключевое слово SNV. Точно так же я могу представить, что Excel знает что-либо о содержимом скрытого подкаталога .svn, в котором хранится информация о рабочей копии SVN.

Есть ли у вас какие-либо подсказки относительно того, что здесь происходит?

Спасибо, Роб.

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Subversion предполагает, что отметка времени «последней модификации» не лжёт.Если отметка времени не изменилась, содержимое файла не проверяется на наличие изменений.Я думаю, что все системы контроля версий делают это, в противном случае проверка локальных изменений будет невыносимо медленной.

edit: для деталей о том, как SVN работает в этом отношении, questions.c в источнике библиотеки рабочих копий SVN - хорошее начало.

3 голосов
/ 19 января 2011

Excel всегда блокирует файлы при открытии, устанавливая отметку времени на текущую дату.При закрытии без сохранения Excel вернет метку времени назад.Это заставляет SVN игнорировать файл.

Что касается измененного содержимого, я не уверен.Вы можете воспроизвести проблему?

1 голос
/ 19 января 2011

Возможно ли, что файл заблокирован Excel, когда он открыт, и svn не может получить к нему доступ, чтобы увидеть, изменился ли он или нет?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...