web-dev-qa-db-ja.com

ワークフロー:ロックなしのGitでのバイナリドキュメント形式の使用(Subversionからの移行)

私たちは、さまざまな顧客向けに多数のプロジェクトを抱えるソフトウェアコンサルタントです。私たちは伝統的にSubversionを使用していますが、現在Gitへの移行を検討しています。

私たちが作成するドキュメントの大部分はお客様と共有され(要件、グローバル設計、テスト仕様など)、MS Officeを使用してこれらを作成します。 Subversionでは、「ロック」機能を使用して、同じドキュメントを同時に編集していないことを確認できます。 Gitでは、分散型の性質上、gitにはロックがないため、これを行うことはできません。

ロックは実際には通信メカニズムにすぎませんが、非常に効果的なものです。

現在、コードと顧客向けのドキュメントは通常、異なるsvnリポジトリの異なるサブフォルダーにあります。 gitに移行する場合、どのようなことをお勧めしますか?一連のオプションが表示されます。

  1. Svnリポジトリをgit 1-on-1に移動します。 Officeファイルにロックを使用する代わりに、gitの人々が提案することを行い、どういうわけかワークフローを変更して修正します。これは、任意のドキュメント編集のブランチで作業していて、レビューでマージすることができます。このアプローチは、例えばプロジェクト管理情報を含むExcelシート。チームメンバーは簡単に編集できます(編集することをお勧めします)が、正式なレビュープロセスの対象ではありません。

  2. コードにはgitを使用し、ドキュメントとプロジェクト管理にはsvnを使用します。これには、特定のデザインっぽいドキュメントがそれが指定するコードの「近く」にならないという欠点があり、人々がそれらを更新するのを忘れる可能性が高くなります。さらに、誰もが2つのツールセットを使用して理解する必要があります。とはいえ、これはおそらく、顧客向けではない設計ドキュメントをテキストベースのドキュメントツール(ラテックス、マークダウン、HTMLなど)に移行する絶好の機会です。

  3. 1と同じですが、svn lockが行うことを実行するgit lockコマンドをハッキングします(読み取り専用フラグを適切に切り替えて、何らかの方法でサーバーと同期します)。

DVCSではロックが機能しないという主張は買いません。システムが完全にオフラインのときでも機能するはずだからです。 SVNロックもオーバーライドできます。これらは通信メカニズムです。なんらかのネットワーク接続がなければ、コンピュータが十分に通信することはできません。

svn lockがワークフローにどのように適合するかに非常に満足している唯一のショップになることはできませんよね?

アイデアやヒントはありますか?

私は https://stackoverflow.com/questions/119444/locking-binary-files-using-git-version-control-system を見つけましたが、議論はかなり技術的です。 2人のチームメンバーが同じバイナリファイルを同時に編集するという実際的な問題を解決または回避する方法を探しています。

16
skrebbel

次の2つの理由から、MS OfficeドキュメントのSVNを維持することをお勧めします。

  1. それはすでにそこにあり、Officeドキュメントを保持するために(私の意見では)優れています( ここ を参照)。これを行うためのサードパーティ製ツールがはるかに多くあります。
  2. ロックはGitで実現できますが、「Gitのような方法」ではありません。これらの機能が必要な場合は、最適なソリューションを提供するツールを使用してください。

「ハンマーを握っているとき、すべてが釘のように見える」という言葉があります。コードを保持するためにGitに移動するからといって、ドキュメントを保持するためにGitを使用する必要があるという意味ではありません。

5

コードバージョン管理は、Officeファイルを操作するのに最適なツールではありません。これらはバイナリであり、これらのツールはファイルレベルの変更で機能するためです。

MediaWiki(無料)やAtlassian Confluence(有料)などのコラボレーションツールを使用して、Word文書を簡単に抽出できます。または、LaTexを使用してOfficeファイルを生成します。

拡大させて...

コラボレーションする必要がある場合は、変更(たとえば、Wordの変更、言い換え、フォントの変更など)をユニットなどのユニットに強調表示するモデルを採用する必要があります。ファイル。

SVNとGitは、コードを考えても、ファイルをテキストコンテンツで比較する低レベルのツールです。しかし問題は、高レベルの変更モデルを抽出するためにファイルの性質/内容を気にしないため、テキストファイルでしか機能しないことです。

明確な例は画像ファイルです。 TortoiseMergeはSVNユーザーが実際に変更した画像を比較するのに役立つツールですが、通常のVCSesはコンテンツによって実行されますパッチファイルに対して。説明させてください。 TortoiseMergeなどのツールは、画像ファイルの新しいバージョンが数ピクセル、または2つのファイルのより複雑なHSV分析を実装している場合は輝度によってのみ変更されることを通知できます。透かしを追加したり、カラーレベルを変更したりできます。画像ファイルを比較するツールは、適切な比較アルゴリズムを実装している場合、違いを強調します。しかし、クライアントで新しいファイルをチェックするためにmustはデルタを生成します。デルタは、削除される行とファイルに追加される行のセットです。バイナリファイルは、ペイロードに\r\nまたは同様のものを含まないhappen場合、改行はありません。行全体を置き換える単一の文字を変更します。

ここに問題があります。バイナリファイルは、リビジョンごとにほぼファイル全体を置き換える可能性があるため、バージョン管理には適していません。 MS Officeを使用してOfficeファイルを作成し、共同編集者がOpenOfficeで編集する場合を考慮してください。 OpenXMLファイルの圧縮アルゴリズムのわずかに異なるバージョンでも実装されている場合、ドキュメント内の単一のコンマを変更したとしても、最終的には完全に異なるファイルになります。

textは会社にとって非常に重要であり、差異を計算したり競合を処理したりできるため、コラボレーションソフトウェアはドキュメントをテキストベースの形式で内部的にレンダリングします。 LaTex、または必要に応じてMarkdownは、高度なマークアップを備えたtextualファイルとしてドキュメントを保存する方法であるため、フォントのない従来のTXTファイルとは異なります/ formattingコントロール。

しかし、明らかにあなたの顧客はMarkdownファイルを開くことを好まないでしょうか?わかりました。単純に、つまり本当に単純に言うと、現在グーグルには怠惰なソフトウェアを使用して、convertソースドキュメントをPDFやWordなどに変換します。

まとめ

テキストファイルをソース管理にチェックインし始めると、ファイル履歴をより詳細に制御でき、特にVCSロックを使用せずに競合を簡単に管理できます。

ドキュメントを正式に共有する前に、ソーステキストドキュメントをOfficeファイルにエクスポートするルーチンが必要です

2つのステップを分けると、学習曲線を犠牲にして人々は幸せになります。