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

99

Я отвечаю за несколько файлов Excel и файлов схемы SQL. Как мне улучшить контроль версий документов для этих файлов?

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

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

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

Маркус Торнтон
источник
5
Я могу преобразовать эти файлы Excel в файлы CSV, а затем отслеживать их с помощью git, чтобы я мог использовать diff для просмотра изменений. Есть ли еще какая-нибудь хорошая практика?
Маркус Торнтон
См. Другие ответы, которые, я думаю, лучше того, который вы приняли.
nealmcb

Ответы:

45

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

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

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

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

Кирелагин
источник
4
Да я знаю мерзавца. Я думаю, что git хорош при отслеживании схем SQL. Что касается файлов Excel (.xlsx и .xls), поскольку они являются двоичными файлами, их отслеживание с помощью git не может показать мне, что было изменено с точки зрения человека. Вот что я путаю.
Маркус Торнтон
2
@MarcusThornton .xlsx- это XML, поэтому все должно работать нормально. В общем, нет возможности легко сравнить два .xlsфайла. Вы, вероятно, могли бы добавить хук перед фиксацией, который будет .csvрядом с ним, и вы сможете различать их.
kirelagin
86

Ответ, который я написал здесь, можно применить и в этом случае. Инструмент под названием 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 есть хорошая глава на эту тему: 8.2 Настройка Git - Атрибуты Git

1615903
источник
2
у меня это не работает на windows7. Я загрузил версию catdoc для Windows отсюда: blog.brush.co.nz/2009/09/catdoc-windows, чем отредактируйте gitconfig и атрибуты, как описано выше. но я все еще получаю: diff --git a / src / Reports / src / main / etc / templates / nbcu.xls b / src / Reports / src / main / etc / templates / nbcu.xls index 2476319..1daec86 100644 Binary файлы a / src /.../ test.xls и b / src /.../ test.xls отличаются версией GIT: 1.7.6.msysgit.1
katrin
Документ по-прежнему сохраняется в виде файла документа или текстового файла? Если это текстовый файл, как восстановить документ?
CMCDragonkai
@CMCDragonkai Это не влияет на способ хранения файла, влияет только вывод команды diff.
1615903
1
Значит, он по-прежнему хранит весь файл, а не различия?
CMCDragonkai
3
Re: xls2txt: крайне неохотно устанавливает инструмент с закрытым исходным кодом с польского веб-сайта. Это может быть то же самое? github.com/hroptatyr/xls2txt Нет README, хотя ...
jcollum
22

Я боролся с этой проблемой в течение последних нескольких дней и написал небольшую утилиту .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 МБ, но затем я смог сохранить пять ее версий с небольшими изменениями между каждой в файле данных Mercurial размером 1,9 МБ и эффективно визуализировать различия между версиями, используя Beyond Compare в текстовый режим.

NB: хотя я использую Mercurial, я прочитал этот вопрос во время исследования своего решения, и в решении нет ничего специфичного для Mercurial, должно работать нормально для Git или любой другой VCS.

Джон Джи
источник
Я на самом деле не пробовал, но я предполагаю, что это было бы - если вы все же попробуете, было бы здорово узнать
Джон Джи
@JonG Я не могу заставить его работать с LibreOffice, а в репозитории bitbucket нет вкладки «Проблемы». Я хотел бы внести свой вклад, если бы мы могли решить проблему!
Christian Droulers,
Привет, @ christian-droulers, я включил проблему в репо, не стесняйтесь добавлять туда что-нибудь!
Jon G
@JonG Выглядит великолепно, наличие дифференцированной истории версий может быть действительно полезно во многих сценариях, связанных с документами! Но почему важно, чтобы файл открывался в Excel? Разве вы не можете просто использовать файл .orig? И как вы думаете, нормализации можно настраивать / динамически, чтобы код можно было использовать и для docx / pptx?
Jørgen Tvedt 08
10

Танте порекомендовала очень простой подход к управлению форматами файлов на основе ZIP в Git :

Откройте ваш файл ~ / .gitconfig (создайте, если он еще не существует) и добавьте следующую строфу:

[diff "zip"]
textconv = unzip -c -a
Роберто Кабеллон
источник
3
затем Пэн Сюй расширил решение, позволив управлять версиями файлов на основе zip с помощью фильтра, в дополнение к просмотру только изменений различий
Роберто Кабеллон
4

Используйте расширение открытого документа .fods. Это простой несжатый формат разметки XML, который могут открывать как Excel, так и LibreOffice, и различия будут хорошо выглядеть.

thouliha
источник
2

Мы создали расширение командной строки Git с открытым исходным кодом для книг Excel: https://www.xltrail.com/git-xltrail .

Вкратце, главная особенность заключается в том, что он позволяет git diffработать с любыми форматами файлов книги, так что он показывает разницу в содержимом VBA книги (в какой-то момент мы сделаем эту работу и для содержимого рабочих листов).

Пока еще рано, но это может помочь.

Бьорн Штиль
источник
и более чем через два года он по- прежнему обрабатывает только VBA, тогда как многие другие решения обрабатывают всю электронную таблицу. На самом деле я не заботился о содержимом VBA в электронной таблице более десяти лет (или, вернее, я активно пытался избежать его ...).
Прорицание
1

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

Чтобы попасть в каталог XML (который можно gitиспользовать), вы должны «разархивировать» файл .xlsx в каталог. Быстрый способ увидеть это в Windows - переименовать файл <filename> .xlsx в <filename> .zip, и вы увидите внутреннее содержимое. Я бы сохранил это вместе с двоичным файлом, чтобы при оформлении заказа вам не нужно было выполнять другие шаги, чтобы открыть документ в Excel.

g19fanatic
источник
1
По крайней мере, инструмент, который я использую (7-zip), позволяет открывать / извлекать все файлы - вам не нужно их переименовывать.
Онур
1

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

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

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

Эриклинд
источник
Это единственный найденный мной инструмент, который работает с модулями, встроенными в файлы .xlsm. Единственная известная мне альтернатива - запустить макрос для экспорта каждого модуля в его собственный файл, зафиксировать их, а затем запустить макрос для их повторного импорта после извлечения и слияния. xltrailнамного проще, чем это.
Майкл Хоффманн
0

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

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

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

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

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

стенки
источник