Будет ли Subversion эффективно хранить документы OpenXML Office? - PullRequest
21 голосов
/ 24 августа 2009

Я управлял Subversion как хранилищем инженерных документов для моей компании. Он работает довольно хорошо, однако у меня есть вопрос о том, как форматы MS Office 2007 (должны) обрабатываться Subversion.

Я просматриваю электронную таблицу Excel 2007 (расширение .xlsx) в моей рабочей копии, в которой Subversion применил свойство svn: mime-type application / octet-stream . Это означает, что Subversion обрабатывается как двоичный файл, верно?

Я надеялся, что новые форматы документов MS Office будут эффективно храниться в Subversion. Насколько я понимаю, полная копия двоичного файла будет создаваться при каждой фиксации этого файла, в то время как если файл является text , небольшое изменение файла приведет к небольшое количество дополнительных данных, добавляемых в хранилище (по крайней мере, в типичной ситуации).

Я не очень разбираюсь в деталях XML, но я думал, что XML-файл - это текст, и поэтому он будет эффективно храниться в Subversion.

Можно ли настроить Subversion для эффективного хранения документов MS Office OpenXML?

Последующие действия (2009-11-09) : я обнаружил, что документы Office могут храниться в виде простого текста с использованием форматов документов Office 2003 XML (Excel: XML Spreadsheet 2003 ; Word: Word XML Document . Есть предупреждение о потере форматирования , но я еще не столкнулся с какой-либо заметной потерей форматирования.

Ответы [ 4 ]

28 голосов
/ 24 августа 2009

Из статьи OpenXML в Википедии :

Файл Office Open XML представляет собой ZIP-совместимый OPC-пакет, содержащий XML документы и другие ресурсы.

Другими словами, файлы OpenXML на самом деле являются файлами zip с файлами XML в них. Сжатие или шифрование «скремблирует» данные, саботируя способность Subversion генерировать дельты между ревизиями. Это не связано с svn:mimetype. Subversion считает, что все файлы являются двоичными при генерации дельт.

На голландском языке у нас есть поговорка «измерение это знание». На приведенном ниже графике показаны результаты эксперимента, в котором я импортировал документ OpenXML размером 500 КБ в репозиторий SVN 1.6 (редакция 1). Затем я добавил абзац из другого документа, сохранил и зафиксировал. Это повторялось 5 раз (пересмотр 2-6).

image

Как видите, фиксация новой ревизии docx, которая просто добавляет абзац, обойдется вам примерно в 150 КБ дискового пространства. Это все еще гораздо эффективнее, чем просто хранить копию каждой ревизии без помощи системы контроля версий.

Я также повторил эксперимент с отдельным репозиторием тестов, распаковывая каждую ревизию документа. Как видите, хранение редакций документа было бы намного эффективнее, если бы оно не было сжато. Также интересно видеть, что собственное сжатие данных subversion примерно так же эффективно, как zip . Хранение первой версии несжатого документа в Subversion занимает примерно столько же места, сколько и в оригинальном документе.

YMMV.

9 голосов
/ 24 августа 2009

Subversion довольно хорошо обрабатывает двоичные файлы. не хранит полную копию для каждого коммита, а только эффективный двоичный дифференциал.

См. FAQ об этом.

3 голосов
/ 24 августа 2009

К сожалению, в настоящее время вы не можете сделать это с Subversion, но вокруг этого было некоторое обсуждение:

http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=651443

0 голосов
/ 24 августа 2009

Вы когда-нибудь пытались открыть файл OpenXML в текстовом редакторе?

Короче говоря: это , а не текст, он все еще двоичный. Так что нет, вы не можете заставить Subversion справиться с этим иначе.

...