Як виконати кращий контроль версії документа у файлах Excel та файлах схем SQL


98

Я відповідаю за кілька файлів Excel та файли схем SQL. Як слід краще контролювати версію документа для цих файлів?

Мені потрібно знати частину, змінену (іншу частину) у цих файлах, і зберегти всі версії для довідки. Наразі я додаю позначку часу до імені файлу, але виявив, що це здається неефективним.

Чи є спосіб чи хороша практика покращити контроль версій документів?

До речі, редактори надсилають мені файли електронною поштою.


5
Я можу перетворити ці файли Excel у файли CSV, а потім відстежувати їх за допомогою git, щоб я міг використовувати diff, щоб побачити модифікацію. Чи існує якась інша хороша практика?
Маркус Торнтон,

Подивіться інші відповіді, які, на мою думку, кращі за ту, яку ви прийняли.
nealmcb

Відповіді:


45

Оскільки ви позначили своє запитання тегом Я припускаю, що ви запитуєте про використання Git для цього.

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

Те саме стосується і .xlsxїх розпакування. .xlsxфайли зберігаються у архівах XML-файлів (див. розділ Як правильно зібрати дійсний файл xlsx з його внутрішніх підкомпонентів? ). Git буде розглядати їх як двійкові, якщо їх не розпакувати. Можна розпакувати .xlsxта відстежити зміни до окремих файлів XML усередині архіву.

Ви також можете це зробити з .xlsфайлами, але проблема тут полягає в тому, що .xlsформат є двійковим, тому ви не можете отримати значущих відмінностей від нього. Але ви все одно зможете переглянути історію модифікацій та перевірити конкретні версії.


4
Так, я знаю git. Я вважаю, що 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


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 файли а / SRC /.../ test.xls і б / ДКЗ /.../ 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 в текстовий режим.

Примітка. Хоча я використовую Mercurial, я читав це запитання, досліджуючи своє рішення, і в рішенні немає нічого специфічного для Mercurial, що повинно добре працювати для Git або будь-якого іншого VCS.


Я насправді не пробував, але, я гадаю, це було б - якщо ви спробуєте, це було б чудово знати
Jon G

@JonG Я не можу змусити його працювати з LibreOffice, і в сховищі bitbucket немає вкладки Проблеми. Я хотів би внести свій внесок, якби ми могли розпочати проблему!
Крістіан Доулерс

Привіт @ christian-droulers, я ввімкнув випуск у Repo, сміливо додай туди щось!
Jon G

@JonG Це виглядає чудово, оскільки незмінна історія версій може бути дуже корисною у багатьох сценаріях, пов'язаних з документами! Але чому важливо, щоб файл відкривався в Excel? Ви не можете просто використовувати файл .orig? І чи вважаєте ви, що нормалізації можуть бути налаштованими / динамічними, щоб код міг використовуватися також для docx / pptx?
Йорген Тведт

10

Танте рекомендував дуже простий підхід до управління форматами файлів на основі ZIP у Git :

Відкрийте файл ~ / .gitconfig (створіть, якщо він ще не існує) і додайте таку строфу:

[diff "zip"]
textconv = unzip -c -a

3
потім, Peng Xu розширив рішення, дозволивши встановити версію файлів на базі zip за допомогою фільтра, на додаток лише до змін різниці
Роберто Кабейон

4

Використовуйте відкрите розширення документа .fods. Це простий, нестиснутий формат розмітки XML, який можуть відкрити як Excel, так і LibreOffice, і відмінності будуть виглядати добре.


2

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

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

Це ще ранні дні, але це може допомогти.


і через два роки він все ще обробляє лише VBA, тоді як багато інших рішень обробляють всю електронну таблицю. Я насправді не піклувався про вміст електронної таблиці VBA більше десяти років (або, вірніше, я активно намагався уникнути будь-яких ...).
Auspex

1

Як зазначалося в коментарі до іншої відповіді, файли .xlsx - це лише XML.

Щоб потрапити до каталогу XML (який є git-able), вам потрібно "розпакувати" файл .xlsx у каталог. Швидкий спосіб побачити це в Windows - перейменувати файл <ім'я файлу> .xlsx на <ім'я файлу> .zip, і ви побачите внутрішній вміст. Я б зберігав це разом із двійковим файлом, щоб при оформленні замовлення вам не потрібно було робити інші дії, щоб відкрити документ у Excel.


1
Принаймні інструмент zip, який я використовую (7-zip), дозволяє відкривати / витягувати всі файли - вам не потрібно їх перейменовувати.
Онур

1

Ця утиліта Excel дуже добре працює для мене:

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

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


Це єдиний інструмент, який я знайшов, який працює з модулями, вбудованими у файли .xlsm. Єдиною альтернативою, яку я знаю, є запуск макросу для експорту кожного модуля у власний файл, фіксація їх, а потім запуск макросу, щоб імпортувати їх знову після витягування та об’єднання. xltrailнабагато простіше, ніж це.
Michael Hoffmann

0

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

Ось інструмент, який я використовую: https://github.com/stenci/ExcelToGit/tree/master

Все, що вам потрібно, це завантажити файл .xlsm (клацніть посилання View Raw на цій сторінці .) Не забудьте перевірити налаштування Excel, як описано в readme. Ви також можете додати код для експорту даних SQL у текстові файли.

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

У моїй робочій версії встановлено десятки книг Excel. Я також використовую файл, щоб відкрити Git-gui для проектів, що не належать до Excel, просто додавши папку git вручну.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.