web-dev-qa-db-ja.com

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

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

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

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

ところで、編集者は私にメールでファイルを送ってくれます。

94
Marcus Thornton

git で質問にタグを付けたので、このためのGitの使用について尋ねていると思います。

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

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

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

38
kirelagin

here と書いた答えは、この場合に適用できます。 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属性

82
1615903

この数日間、この正確な問題に苦労してきました。Excelファイルをソース管理に保存しやすいように抽出および正規化する小さな.NETユーティリティを作成しました。ここで実行可能ファイルを公開しました:

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

..そしてここのソース:

https://bitbucket.org/htilabs/ooxmlunpack

興味がある場合は、これをより構成可能にしますが、現時点では、実行可能ファイルをフォルダー(たとえば、ソースリポジトリのルート)に入れて実行する必要があります:

  • フォルダーとそのサブフォルダーをスキャンして、.xlsxおよび.xlsmファイルを探します
  • ファイルのコピーを* .origとして取得します。
  • 各ファイルを解凍し、圧縮せずに再圧縮します。
  • アーカイブ内の有効なXMLファイルをきれいに印刷します。
  • Calcchain.xmlファイルをアーカイブから削除します(多くの変更が加えられ、ファイルの内容に影響を与えないため)。
  • 書式設定されていないテキスト値をインライン化します(それ以外の場合、これらはルックアップテーブルに保持され、1つのセルでも変更された場合に内部XMLに大きな変更を引き起こします)。
  • 数式を含むセルから値を削除します(これらは、シートを次に開いたときに計算できるためです)。
  • 抽出されたZipアーカイブコンテンツを含む* .extractedサブフォルダーを作成します。

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

食欲がある場合は、ツールをより構成可能にしたいと思います。誰もがコンテンツを抽出したり、おそらく式セルから値を削除したりする必要はないと思いますが、現時点ではこれらは両方とも非常に便利です。

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

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

22
Jon G

TanteはGitでのZipベースのファイル形式の管理で非常にシンプルにしました:

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

[diff "Zip"]

textconv = unzip -c -a
7

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

一言で言えば、主な機能は、git diffを任意のワークブックファイル形式で動作させ、ワークブックのVBAコンテンツの差分を表示することです(ある時点で、このワークシートコンテンツでも動作します) )。

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

2
Bjoern Stiel

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

Excelのバージョン管理

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

1
eriklind

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

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

1
g19fanatic

オープンドキュメント拡張機能.fodsを使用します。これは、ExcelとLibreOfficeの両方で開くことができる、プレーンで非圧縮のXMLマークアップ形式であり、差分は見栄えがよくなります。

1
thouliha

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

私が使用するツールは次のとおりです。 https://github.com/stenci/ExcelToGit/tree/master

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

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

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

0
stenci