ExcelファイルとSQLスキーマファイルのドキュメントバージョン管理を改善する方法


98

私はいくつかのExcelファイルとSQLスキーマファイルを担当しています。これらのファイルでドキュメントのバージョン管理を改善するにはどうすればよいですか?

これらのファイルで変更された部分(異なる部分)を確認し、すべてのバージョンを参照用に保持する必要があります。現在、ファイル名にタイムスタンプを追加していますが、効率が悪いようです。

ドキュメントのバージョン管理を改善する方法または良い方法はありますか?

ちなみに、編集者はメールでファイルを送ってくれます。


5
これらのExcelファイルをCSVファイルに変換し、gitを使用して追跡することで、diffを使用して変更を確認できます。他に良い習慣はありますか?
マーカスソーントン

他の回答をご覧ください。あなたが受け入れた回答よりも優れていると思います。
nealmcb 2014年

回答:


44

あなたの質問にタグを付けたので このためのGitの使用について質問していると思います。

まあ、SQLダンプは通常のテキストファイルなので、Gitで追跡することは完全に理にかなっています。リポジトリを作成してそこに保存するだけです。ファイルの新しいバージョンを取得したら、単に上書きしてコミットすると、Gitがすべてを把握し、変更日を確認したり、このファイルの特定のバージョンをチェックアウトしたり、さまざまなバージョンを比較したりできます。

同じことが当てはまります .xlsx解凍した場合も。.xlsxファイルは、XMLファイルのディレクトリを圧縮したものです(内部のサブコンポーネントから有効なxlsxファイルを適切にアセンブルする方法を参照してください)。解凍しない限り、Gitはそれらをバイナリとして表示します。を解凍して.xlsx、アーカイブ内の個々のXMLファイルへの変更を追跡することができます。

.xlsファイルでこれを行うこともできますが、ここでの問題は、.xls形式がバイナリであるため、そこから意味のある差分を取得できないことです。ただし、変更履歴を確認したり、特定のバージョンをチェックアウトしたりすることはできます。


4
はい、gitを知っています。SQLスキームを追跡する場合は、gitが良いと思います。Excelファイル(.xlsxおよび.xls)はバイナリファイルであるため、gitを使用して追跡しても、変更されたものを人間の目で見ることはできません。これは私が混乱しているものです。
マーカスソーントン

2
@MarcusThornton .xlsxはXML なので、正常に動作するはずです。一般に、2つの.xlsファイルを簡単に比較する方法はありません。あなたはおそらく.csvそれを近くに置くpre-commitフックを追加することができ、それらをdiffすることができます。
kirelagin 2013年

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では動作しません。ここからWindows用のcatdocバージョンをダウンロードしました: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 2014

@CMCDragonkaiこれはファイルの保存方法には影響せず、diffコマンドの出力のみが影響を受けます。
1615903 2014

1
それで、差分ではなくファイル全体をまだ保存していますか?
CMCDragonkai 2014

3
Re:xls2txt:ポーランドのWebサイトからクローズドソースのツールをインストールするのは非常に嫌です。これは同じ事でしょうか?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に大きな変化を引き起こします)。
  • 数式が含まれているセルから値を削除します(シートを次に開いたときに値を計算できるため)。
  • 抽出されたzipアーカイブの内容を含むサブフォルダー* .extractedを作成します。

明らかにこれらすべてが必要なわけではありませんが、最終的にはExcelで引き続き開くスプレッドシートファイルになりますが、これは差分と増分圧縮にはるかに適しています。また、抽出されたファイルも保存することで、バージョン履歴で各バージョンに適用された変更がより明確になります。

そこに食欲がある場合、誰もがコンテンツを抽出したり、場合によっては数式セルから値を削除したりするとは限らないので、ツールをより設定しやすくしましたが、現時点ではどちらも非常に便利です。

テストでは、2 MBのスプレッドシートを21 MBに「アンパック」しましたが、1.9 MBのMercurialデータファイルにそれぞれの小さな変更を加えた5つのバージョンを保存し、Beyond Compareでバージョン間の違いを効果的に視覚化できましたテキストモード。

注意:私はMercurialを使用していますが、ソリューションの調査中にこの質問を読みました。ソリューションについてMercurial固有のものはなく、Gitまたはその他のVCSで正常に動作するはずです。


私は実際に試していませんが、私はそれがだろうと仮定-あなたはそれは素晴らしいことだ試みが知っていることを与えない場合
ジョン・Gに

@JonG LibreOfficeで動作させることができず、bitbucketリポジトリに[Issues]タブがありません。問題が発生する可能性がある場合は、貢献したいです!
Christian Droulers、2015年

こんにちは@ christian-droulers、レポで問題を有効にしました。そこに何か追加してください!
Jon G

@JonGこれは見栄えがよく、差分可能なバージョン履歴があると、ドキュメントに関連する多くのシナリオで本当に役立ちます。しかし、なぜファイルをExcelで開くことが重要なのでしょうか。.origファイルだけを使用できませんか?そして、正規化は構成可能/動的であるため、コードをdocx / pptxにも使用できると思いますか?
ヨルゲンTvedt

10

Tanteは、GitでのZIPベースのファイル形式の管理に非常にシンプルなアプローチを推奨しました。

〜/ .gitconfigファイルを開き(まだ存在しない場合は作成します)、次のスタンザを追加します。

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

3
次に、Peng Xuはソリューションを拡張し、差分の変更のみを表示するだけでなく、フィルターを使用してzipベースのファイルをバージョン管理できるようにしました:tante.cc/2010/06/23/managing-zip-based-file-formats-in-git/ …
ロベルト・カベロン、2017

4

open document extensionを使用します.fods。これはプレーンで圧縮されていないXMLマークアップ形式で、ExcelとLibreOfficeの両方で開くことができ、差分は見栄えがよくなります。


2

Excelワークブック用のオープンソースのGitコマンドライン拡張を作成しました:https : //www.xltrail.com/git-xltrail

一言で言えば、主な特徴はそれが作ることです git diff、ワークブックのVBAコンテンツの差分を表示するように、すべてのワークブックファイル形式で機能することです(ある時点で、この機能をワークシートコンテンツにも適用します)。

まだ初期段階ですが、役立つかもしれません。


2年以上経過して、VBAのみを処理しますが、他のソリューションの多くはスプレッドシート全体を処理します。10年以上、実際にはスプレッドシートのVBAコンテンツを気にしていません(もっと正確に言えば、積極的に何かを回避しようとしました...)。
Auspex

1

別の回答のコメントで述べたように、.xlsxファイルは単なるXMLです。

XMLディレクトリ(git-ableです)に移動するには、.xlsxファイルをディレクトリに「解凍」する必要があります。Windowsでこれを確認する簡単な方法は、ファイル<filename> .xlsxの名前を<filename> .zipに変更することです。これにより、内部のコンテンツが表示されます。これをバイナリと一緒に保存して、チェックアウト時にExcelでドキュメントを開くために他の手順を実行する必要がないようにします。


1
少なくとも、私が使用するzipツール(7-zip)では、すべてのファイルを開いたり抽出したりできます。ファイル名を変更する必要はありません。
Onur

1

このExcelユーティリティは私にとって非常にうまく機能します。

Excelのバージョン管理

これは、ブックとVBAマクロ用の非常に単純なバージョン管理ツールです。バージョンをコミットすると、PCのGitリポジトリに保存されます。私はそれを試したことはありません。SQLスキーマファイルですが、回避策があると確信しています。


これは、.xlsmファイルに埋め込まれたモジュールで動作する唯一のツールです。私が知っている唯一の代替策は、マクロを実行してすべてのモジュールを独自のファイルにエクスポートし、それらをコミットしてから、プルしてマージした後、マクロを実行してすべてを再度インポートすることです。xltrailそれよりずっと簡単です。
Michael Hoffmann、

0

Excelファイルでの私のアプローチはJonのアプローチと似ていますが、生のExcelテキストデータを操作する代わりに、より使いやすい形式にエクスポートします。

ここに私が使用するツールがあります: https //github.com/stenci/ExcelToGit/tree/master

必要なのは、.xlsmファイルをダウンロードすることだけです(このページの [Rawを表示]リンクをクリックしてください))。readmeに記載されているように、Excel設定を確認することを忘れないでください。SQLデータをテキストファイルにエクスポートするコードを追加することもできます。

このワークブックは、バイナリExcelからテキストファイルへのコンバーターであり、Windows Gitツールのランチャーでもあり、Excel以外の関連プロジェクトでも使用できます。

私の作業バージョンは、数十のExcelブックで構成されています。このファイルを使用して、Excel以外のプロジェクトのGit-guiを開き、手動でgitフォルダーを追加します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.