Как лучше управлять версией документа в файлах Excel и файлах схемы SQL

Я отвечаю за несколько файлов Excel и файлов схемы SQL. Как мне улучшить управление версиями документов в этих файлах? Мне нужно знать измененную часть (другую часть) в этом файле и сохранить все версии для справки. В настоящее время я добавляю метку времени для имени файла, но я обнаружил, что она неэффективна.

Есть ли способ или хорошая практика для улучшения контроля версий документов?

Кстати, редакторы отправляют мне файлы по электронной почте.

Ответ 1

Поскольку вы отметили свой вопрос Я предполагаю, что вы спрашиваете об использовании git для этого.

Ну, дампы SQL - это обычные текстовые файлы, поэтому имеет смысл отслеживать их с помощью git. Просто создайте репозиторий и сохраните их в нем. Когда вы получаете новую версию файла, просто перезапишите его и зафиксируйте, git будет определять все для вас, и вы сможете увидеть даты изменений, проверить конкретные версии этого файла и сравнить разные версии.

То же самое верно для .xlsx, если вы их распакуете. .xlsx файлы заархивированы директориями XML файлов (см. Как правильно собрать действительный файл xlsx из его внутренних подкомпонентов?). Git будет рассматривать их как двоичные, если не распакован. Можно разархивировать .xlsx и отслеживать изменения отдельных файлов XML внутри архива.

Вы также можете сделать это с помощью файлов .xls, но проблема в том, что формат .xls является двоичным, поэтому вы не можете получить значимые отличия от него. Но вы по-прежнему сможете просмотреть историю изменений и проверить конкретные версии.

Ответ 2

В этом случае можно применить ответ, который я написал здесь. Инструмент, называемый xls2txt, может обеспечивать считываемый человеком вывод из файлов xls. Короче говоря, вы должны поместить это в свой файл .gitattributes:

*.xls diff=xls

И в .git/config:

[diff "xls"]
    binary = true
    textconv = /path/to/xls2txt

Конечно, я уверен, что вы можете найти похожие инструменты для других типов файлов, сделав git diff очень полезным инструментом для офисных документов. Это то, что я имею в моем глобальном .gitconfig:

[diff "xls"]
    binary = true
    textconv = /usr/bin/py_xls2txt
[diff "pdf"]
    binary = true
    textconv = /usr/bin/pdf2txt
[diff "doc"]
    binary = true
    textconv = /usr/bin/catdoc
[diff "docx"]
    binary = true
    textconv = /usr/bin/docx2txt

В книге Pro Git есть хорошая глава по теме: http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Binary-Files

Ответ 3

Я борется с этой точной проблемой за последние несколько дней и написал небольшую .NET-утилиту для извлечения и нормализации файлов Excel таким образом, что их гораздо проще хранить в исходном управлении. Я опубликовал исполняемый файл здесь:

https://bitbucket.org/htilabs/ooxmlunpack/downloads/OoXmlUnpack.exe

.. и источник здесь:

https://bitbucket.org/htilabs/ooxmlunpack

Если у вас есть какой-то интерес, я с удовольствием сделаю это более настраиваемым, но на данный момент вы должны поместить исполняемый файл в папку (например, корень вашего исходного репозитория), и когда вы запустите его, он будет:

  • Сканировать папку и ее подпапки для любых файлов .xlsx и .xlsm
  • Возьмите копию файла как *.orig
  • Разархивируйте каждый файл и повторно запишите его без сжатия
  • Довольно печатать любые файлы в архиве, которые являются действительными XML
  • Удалить файл calcchain.xml из архива (так как он сильно изменяет и не влияет на содержимое файла)
  • Ввести любые неформатированные текстовые значения (в противном случае они сохраняются в таблице поиска, которая вызывает большие изменения во внутреннем XML, если изменяется даже одна ячейка)
  • Удалить значения из любых ячеек, содержащих формулы (поскольку их можно просто вычислить при следующем открытии листа)
  • Создайте подпапку *.extracted, содержащую извлеченное содержимое zip-архива

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

Если у вас есть какой-либо аппетит, я с удовольствием сделаю инструмент более настраиваемым, так как я думаю, что не все хотят, чтобы содержимое было извлечено, или, возможно, значения, удаленные из ячеек формулы, но они оба очень полезны для меня на момент.

В тестах таблица размером 2 МБ "распаковывается" до 21 МБ, но затем я смог сохранить пять ее версий с небольшими изменениями между ними, в файле данных меркурий 1.9 МБ и визуализировать различия между версиями, эффективно используя Beyond Compare in текстовый режим.

n.b. хотя я использую Mercurial, я читаю этот вопрос, исследуя мое решение, и нет ничего, что может быть с точки зрения мерчанности в решении, должно отлично работать для git или любых других vcs

Ответ 5

Как упоминалось в другом ответе ответа, файлы .xlsx - это всего лишь XML.

Чтобы перейти в каталог XML (который является git -able), вам нужно "распаковать".xlsx файл в каталог. Быстрый способ увидеть это в окнах - переименовать файл .xlsx в .zip, и вы увидите внутреннее содержимое. Я бы сохранил это вместе с двоичным кодом, чтобы при проверке вам не нужно было делать другие шаги, чтобы открыть документ в excel.

Ответ 6

Мой подход с файлами Excel похож на Jon's, но вместо работы с необработанными текстовыми данными Excel я экспортирую в более дружественные форматы.

Вот инструмент, который я использую: https://github.com/stenci/ExcelToGit/tree/master

Все, что вам нужно, это загрузить файл .xlsm(нажмите ссылку "Просмотр Raw" на на этой странице.) Не забудьте проверить Excel, как описано в readme. Вы также можете добавить код для экспорта данных SQL в текстовые файлы.

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

Моя рабочая версия настроена с десятками книг Excel. Я также использую этот файл, чтобы открыть Git -gui для проектов без Excel, просто добавив папку Git вручную.

Ответ 7

Эта утилита Excel работает очень хорошо для меня:

Контроль версий для Excel

Это довольно простой инструмент управления версиями для рабочих книг и макросов VBA. После того, как вы зафиксируете версию, она сохраняется в хранилище Git на вашем ПК. Никогда не пробовал. SQL, но я уверен, что есть способ.