コラボレーションのバージョン管理(単語レベルの差分を使用)


20

現在、ほとんどの論文は共同で書かれており、共同研究者はしばしば異なる場所にいます。私は常にドキュメントとコードにバージョン管理システムを使用しており、共同ソフトウェアプロジェクトにはバージョン管理も重要であると考えていますが、理論的には多くの研究者が共同論文の作成に使用を避けているようです。共同作業者に、バージョン管理(リビジョン管理)が連携するための良いアイデアであることを納得させるには、いくつかの前提条件があるようです。 改行や段落の特定の一連の規則について全員に心配させたり、タブ/スペースの変換を回避したりすることはできません。

誰かが小さな共有ドキュメントリポジトリの無料ホスティングを提供し、テキストレベルの差分を処理できるテキストドキュメントフレンドリーなバージョン管理(行ベースではない)を提供していますか?

そうでない場合は、経験に基づいた他の提案を歓迎します(憶測を避けましょう)。

私はGit、Subversion、Mercurial、darcs、またはBazaarをwdiffで単語レベルの違いを処理するようにセットアップし、公開キー(たとえばssh経由)で保護されたアクセスをセットアップする簡単な方法を考えていました。しかし、私が見たバージョン管理プロバイダーはどれも、このようなものを提供していないようです。科学的なコラボレーションでは、これらの企業の多くが強調する「エンタープライズ」機能はあまり重要ではありません(多くのブランチ、tracとの統合、サードパーティによる監査、階層プロジェクトチーム)。しかし、ワードレベルの差分は重要であるように見えますが、サポートされていません。私の経験では、テキストファイルの行レベルの差分では、タブをスペースに変更したり、その逆の問題を引き起こしたりする段落やエディターの再フォーマットを避ける必要があります。また、多くの誤った編集の競合があるようです。

コラボレーション用のツールに関する関連する質問、およびTeX.SE上の関連する質問、LaTeXドキュメントのバージョン管理およびバージョン管理用のLaTeXパッケージに関する質問を参照してください。主要なバージョン管理システムの1つにすぎないホスティングプロバイダーの大規模なリストについては、SVNホスティング比較レビューチャートも参照してください。


編集: TeX.SEの質問「Subversionに最適なLaTeX対応diffおよびマージツール」に対するJukka Suomelaの回答は、これまでの最良の提案のようで、単語レベルでのデルタの解釈方法を網羅しています。さらに、Jukkaは、リポジトリ側の連続するバージョン間の違いが、競合の検出と変更のマージに使用されるユーザーレベルの違いとはどのように異なるかを説明しました。TeX.SEでのJukkaの回答は、同時編集とマージを明示的に除外し、代わりに従来のアトミック編集トークンに依存して編集の競合を回避しています。元の質問を明確化(および変更)しますが、行の違いではなく単語の違いに基づいて編集の競合を確実に解決する方法はありますか?言い換えれば、できますwdiffまたは行末の違いと空白の違いを無視できる方法と同様に、バージョン管理ツールの競合検出部分に同様のツールを統合しますか?


3
私は質問をよく理解していません。たとえば、SVNでは、ユーザーに表示される差分はクライアントによって生成され、単語ベースの差分と行ベースの差分のどちらを取得するかは、SVNクライアント(およびその構成)に依存します。SVNリポジトリをホストする会社は、これにまったく影響しません。
ユッカスオメラ

2
@sureshテキスト文書(編集済み)を編集している場合、誰かが1つのコンマを変更したことを確認するために、diffの行全体をスキャンしなければならないことはしばしば苦痛です。通常、正しい動作は変更の最小単位を表示することです。または、誰かが改行を使用しない場合の動作を検討してください。次に、1つの単語を変更すると、小さな変更を見つけるために段落全体がdiffに表示されます。
マークReitblatt

2
私は、行を折り返すためにハード改行を使用しません。私のLatexソースコードでは、物理的なテキスト行は通常、テキストの完全な段落です。エディタは、現在のウィンドウ幅に応じて、表示用にワードラップすることができます。物事を大幅に簡素化します。段落を再度ワードラップする必要があるか、または共著者と「正しい」行幅に同意するなどのことを心配する必要はありません。ただし、変更をすばやく確認するにはワードレベルの差分ツールが必要です。
ユッカスオメラ

2
@Andras私のポイントは、VCシステムはクライアント側で2つのリビジョンを再構築する必要があるだけで、驚くことではないがすべてのVCシステムが再構築できることです。次に必要なのは、単語レベルの3者間マージユーティリティですが、私は知りません。(たとえば、TortoiseMergeとkdiff3は両方とも行ベースです。)このようなユーティリティがあれば、外部マージユーティリティを指定できるVCシステムで十分です。(これにはsvn、bzr、git、hgが含まれます...)
マーベリックウー

3
ここでの混乱の原因の1つは、サーバーとクライアントの間の通信でSVNによって使用され、リポジトリを保持するためにサーバーによって内部的に使用される組み込みバイナリ差分アルゴリズム(個々のバイトのレベルで動作)があることですコンパクト。これは単に最適化です。ユーザーには表示されず、同じバイナリ差分アルゴリズムをあらゆる種類のファイルに適用できます。ユーザーに見えるすべてのもの(人間が読める差分、マージ、競合解決...)はクライアント側で発生します。
ユッカスオメラ

回答:


11

gitを使用して、latexで書かれたいくつかのドキュメントを共同作業しました。いくつかのルールに従う必要があります。

  • 各行を新しい行で開始します。latexは、空白行がない限り、これらの改行を無視します
  • 書式設定に同じ設定を使用します(タブ/スペース/最大テキスト幅)
  • 最良の結果を得るには、リポジトリに.gitattributesファイルを作成し、行を追加します*.tex diff=tex。これにより、diffがtex構文を認識し、より意味のある出力につながります。

その後、git diff --color-wordsgitk --color-wordsを使用して単語の違いを確認できます(git diff / gitログを表示するために常にword-diffアルゴリズムを使用するようにgitを構成する方法については、この記事のGitのWord-by-word diffsも参照してください)。

手動でのマージを減らすために、セクションとサブセクションに別々のファイルを使用することをお勧めします(ドキュメントのサイズに応じて)。


私は自分のドキュメントに対してこれを行うことを検討します。それは私の目的のほとんどを達成する簡単な方法のようです。しかし、誰もがこのように動作することに熱心です...
アンドラス・サラモン

2
この方法で作業することをためらう人のために、gitコマンドラインが気に入らない場合はTortoiseGitを使用できます。改行部分の各文についてであり、最大テキスト幅が強制されていない限り、これはそれほど重要ではありません。(私はそのルールなしでいくつかのプロジェクトに取り組んできました)
デイビーランドマン

全体的に、gitは良い選択であることに同意します。しかし、(サブ)セクションのファイルを分離することで、手動マージの数を減らすことができるのはなぜですか?また、各行を新しい行で開始するとどのように役立つのか(編集の過程で文が混在することもあります)。
dd1

分離ファイルに関して:当時、私はgitマージの正確な詳細を理解していなかったので、実際には不要ですが、他の理由からはまだお勧めです。新しい行の文は非常に重要です。gitの周りのほとんどのツールは常に行の変更を表示するので、別の戦略を使用すると、たとえばエディターが改行するようにすると、誰かが段落の1単語を変更するたびに、ハントする必要がありますそれは起こりました、そして自動マージの場合:方法はありません。
デイビーランドマン


4

私は本当に他の人をエコーし​​、座って素敵なSVN戦略を立てることを提案します。SVNを使用して、「研究」構造全体をホストします。

  • JabRefリファレンス管理
  • ダウンロードしたPDF
  • 記事

それはすべてを含んでいるので素晴らしいです、そしてもちろん歴史を提供します。独自のサーバーが必要であるという警告。ただし、既存のWindowsマシン(または使い慣れたもの)がある場合は、VisualSVN Serverを介して簡単にインストールできます。次に、共同編集者用の適切なアカウントを作成し、適切な領域へのアクセスを許可します(つまり、JabRef bibtexファイルへの読み取りアクセス、および共有の「進行中」の記事領域への読み取り/書き込み)。

TortiseSVNは、SVNと対話するためのWindowsクライアントとして使用できます。ファイルの移動/削除とフォルダーのコピーには注意する必要があります(SVNは各フォルダーの非表示フォルダー内にメタデータを保存するため、SVN内から削除コマンドを実行して削除する必要があります。少し慣れる必要があります。へ、しかし投資の価値があります)。

そして、共同編集者と作業するとき、彼らは明らかにSVNも使用しなければなりません。しかし、繰り返しますが、学習への投資は無価値ではありません。また、考えてみると、jabrefファイルに読み取り専用でアクセスできるようにすることもできます(おそらく、svnの「外部」機能を使用)。

このように、少し考えて少し努力すれば、通常どおりドキュメントを編集し、毎晩変更をコミットし、午前中に更新し、すべての競合を簡単に解決することができます。

本当にお勧めです。独自のSVNを設定する人が多いほど、将来的にはコラボレーションオプションのみが改善されるため、より優れています(ただし、科学リポジトリを設定する「標準的な」方法があればおそらく有益です)。

-編集:実際、私はそのような提案をここに書きました:LaTeXとSVNとの科学的コラボレーションのための戦略。svn externals機能を使用して、同様の設定を持つ人々の間で簡単にコラボレーションできるようにすることを提案します。変更が必要か、単に適切でないかを教えてください。


4

あなたのすばらしい投稿を読んで、自分で解決策を探している間、私はgitkの単語レベルで変更色付けするオプションにつまずきました。オートコンプリートでは提供されず、gitkのマニュアルページには記載されていないため、gitkパラメータは新しい機能またはドキュメント化されていない機能のようです。
私が見つけたオプションは次のとおりです。

gitk --word-diff=plain
gitk --word-diff=porcelain
gitk --word-diff=color

「diff --color-words」gitkを検索するトピックに関するいくつかのディスカッションを見つけることができます。

編集:
これは次のようなものです...

gitkを使用して単語レベルで色分けされた違い


1

私は問題を非常によく理解しています。gitとの差分にKaleidoscopeを使い始めました。Mac専用ですが、その比較はwdiffよりもうまく機能し、インターフェイスとライブアップデートもあります。


2
私には、Kaleidoscopeは単なる行ベースの差分ツールであり、さらに各行内の変更を強調表示しているようです。これは、wdiffやフレンドの代わりにはなりません。Kaleidoscopeは、たとえば、テキストの段落を取り、改行を変更するだけの場合、読み取り不能な差分を生成します。Wdiffベースのツールは、改行の変更を単に無視します。
ユッカスオメラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.