2009-05-24 2 views
7

チェックインバージョンの違いを計算する際に、空白、中カッコなどを無視するdiffコントロール機能を持​​つソースコントロール製品はありますか?私はClearcaseのdiffがこれをしたことを覚えているようですが、Visual SourceSafe(または少なくとも私が使ったバージョン)はそうではありませんでした。コードフォーマットとソースコントロールdiffs

私が尋ねる理由はおそらくかなり典型的です。チームにいる4人の完璧に合理的な開発者は、4つの全く異なるコードの書式設定方法を持っています。他の誰かによって最後に変更されたコードをチェックアウトすると、それぞれは即座に何らかのプログラムやエディタマクロを実行し、好きなようにフォーマットします。彼らは実際にコードを変更します。彼らは変更をチェックインします。彼らは休暇に行きます。 2日後、2年間罰金を科していたプログラムが爆発した。バグに割り当てられた開発者はバージョン間でdiffを行い、204の相違点を見つけますが、そのうちの3つのみが重要です。これはdiffアルゴリズムが不十分であるためです。

はい、コーディング標準を持つことができます。ほとんどの人は彼らが恐ろしいと感じます。誰もが自分のケーキを食べて食べることができる解決策がはるかに望ましいようです。

=========

編集:いくつかの素晴らしい提案をみんなに感謝。私は離れてこのから取る何

である:

(1)プラグイン型差分とソース制御システムであることが好ましいです。

(2)適切なオプションでdiffを検索します。

(3)良いソースフォーマットプログラムを使用し、チェックイン標準で解決します。

音が計画通りです。再度、感謝します。

+0

ClearCaseが空白無視するオプションを持っています違い。 –

答えて

2

チェックインする前に、それぞれの人がチェックアウトし、自分の好みに再フォーマットし、変更を加え、正式な標準に再フォーマットしてチェックインできるように、あるフォーマットを選択してインデントツールを実行する必要がありますか?

2つの追加ステップがありますが、すでに作業中にインデントツールを使用しています。トリガーされたチェックインスクリプトかもしれませんか?

編集:これはおそらくブレースの問題も解決します。

(これは私自身、したがって "perhapes"と "maybes"を試していませんでしたが、同じ問題を抱えてプロジェクトに参加しています。何百もの無関係のdiff変更は空白に限定されませんが、フォーマット自体を含みます)。

+1

いいえ、あなたのチームを同じページに入れてください。 http://stackoverflow.com/questions/903754/do-you-still-limit-line-length-in-code/904008#904008 – bendin

+0

@bendin、どういう意味ですか? – FeatureCreep

0

Subversionはこれをネイティブに最新のバージョンでサポートしているか、Gnu Diffのような別のdiffを使用しているようです。

4

Gitは、これらのオプションを持っている:

  • --ignore-space-at-eol

    はEOLでの空白の変更を無視します。

  • -b, --ignore-space-change

    空白の量の変化を無視します。これは、行末の空白を無視し、1つまたは複数の空白文字の他のすべてのシーケンスが同等であるとみなします。

  • -w, --ignore-all-space

    行を比較するときに空白を無視します。 1つの行に空白があり、もう1行に がない場合でも、これは違いを無視します。

Gitの差分を使用してブレースの変更を無視できるかどうかはわかりません。

C/C++コードの場合はAstyleのルールを定義し、ソースコードのブレーススタイルをAstyleを使用して必要なブレーススタイルに変換することができます。 git diffは正常な出力を生成します。

0

Beyond Compareはこれを(さらにはるかに)行い、SubversionまたはSourcesafeのいずれかに外部差分ツールとして統合することができます。

0

Is it possible for git-merge to ignore line-ending differences?で説明したように、適切なVCSオプションに頼るのではなく、正しいdiffツールを関連することが重要です(Gitに空白に関するオプションがいくつかありますAlan's answer、それはいつも完全ではないでしょう)。

DiffMergeは、スペースを無視できないだけでなく、指定されたファイルで使用されるプログラミング言語に基づいて他の「バリエーション」も無視できるため、「無視」オプションでより完全です。

4

1つの(恐ろしい)コーディング標準を選択し、公式のコーディング標準文書で書き留めて、あなたの人生で乗り越え、空白をつぶすことは生産的な作業ではありません。

あなたはプロの開発者であることを覚えておいてください。プロジェクトを完了させるための仕事であり、個人的なスタイルの好みのためにコード内の何かを変更することは、プロジェクトを傷つけることです。あなたのソースフォーマッタやコンパイラにバグがある場合、問題を見つけるのは難しいです(そして、2人の同僚がケーシングを越えて戦い始めたときに、あなたの派手なdiffツールはあなたを助けません)。

そして、誰かが選択したスタイルで作業することに同意しない場合はちょうど彼が職業としてのプログラミングではない趣味として、参照があることを彼(または彼女を)思い出させるhttp://www.ericsink.com/entries/No_Great_Hackers.html

+0

+1 - これをPythonコードで試して、スパークが飛ぶのを見てください! – richq

関連する問題