114

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

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

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

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

4

9 に答える 9

95

ここに書いた答えは、この場合に適用できます。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 book には、このテーマに関する優れた章があります: 8.2 Git のカスタマイズ - Git 属性

于 2013-06-14T10:06:33.943 に答える
51

のタグを付けたので、これに対する Git の使用法について質問していると思います。

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

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

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

于 2013-06-13T09:51:59.480 に答える
23

私はここ数日間、まさにこの問題に取り組んでおり、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を使用してバージョン間の違いを効果的に視覚化することができました。テキストモード。

NB: Mercurial を使用していますが、解決策を調べているときにこの質問を読みましたが、解決策について Mercurial 固有のものは何もありません。Git やその他の VCS で問題なく動作するはずです。

于 2014-06-10T16:12:19.667 に答える
2

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

Excel のバージョン管理

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

于 2016-04-12T17:24:15.640 に答える
1

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

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

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

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

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

于 2015-10-10T23:27:13.103 に答える
1

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

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

于 2013-06-13T11:29:41.203 に答える