2009-05-05 12 views
3

注::この質問は当初GitHub以前の時代に尋ねられました。ビジュアルディフィーリングとユニファイドディフパッチファイルを使用するタイミングは?


私は2002年から開発されていなかったいくつかのコードを引き継いだと私は時間をかけて、それに対して送信されたパッチを通して見えました。これらのパッチはすべてunified diff形式であり、明らかにコード改善を提出するためのデファクトスタンダードです。ここで1つのパッチは、ように見えたものです:

@@ -365,7 +385,10 @@ 
    return() unless defined $op_sym; 

    $a_or_b = $op->[OPCODE] ne "+" ? 0 : 1 unless defined $a_or_b; 
- return ($op_sym, $seqs->[$a_or_b][$op->[$a_or_b]]); 
+ my $line = $seqs->[$a_or_b][$op->[$a_or_b]]; 
+ my @ret = ($op_sym, $line); 
+ return @ret; 
} 

どのように正確に私は、この変更は、文脈で何をするかを把握することが出来るのですか?パッチはサブルーチンがどのような影響を及ぼすか教えてくれません。元のファイルを開いて365行目に移動し、パッチファイルの '+'行のパッチファイルの ' - '行に対応する既存の行を精神的に置き換える必要があります。 WTF?

は私の正気を維持するために、私は、実際にパッチが何をしているのか確認するために file.origfileに差分ツールを使用して、 filepatchを実行している、 file.origとして元 fileのコピーを作成することになりました。

問題は次のとおりです。ファイル全体を送信するのはいつですか?また、いつパッチファイルを送信するのが理にかなっていますか?

パッチを受け入れるほとんどの開発者は、そのパッチでパッチが参照しているものを即座に把握できますか?ファイルに頻繁に現れる行を削除するとどうなりますか?どのサブルーチンでパッチが影響を受けるかを知っていますか?

帯域幅が貴重だった日にパッチが戻ってきたのかもしれませんが、今日の帯域幅はこの問題を時代遅れにしています。私は、パッチファイルが誤植のような単純な変更に適していることに同意します。

しかし、GitHubやGoogle Codeが登場する前であっても、ファイル全体から重要なコードの寄稿を依頼している開発者はいません。誰もが "パッチが歓迎"と期待して統合diffを期待しています。ビジュアル差分ツールでファイルを並べて比較することはできませんか? character-level intra-line differencesはどうですか?パッチファイルには表示されません。

+1

あなたは私が思う少数派からは遠く離れていますが、これを書き直してさらに技術的な質問をする必要があります。初心者のためのより良いタイトルかもしれない – annakata

+1

私はソースコントロール全体の世界にはかなり新しいので、私は賛否両論(したがって答えではなくコメント)を重視することはできませんが、私は確かに視覚的なものを好みます。 TortoiseSVNのdiffツールとWinMergeを組み合わせることで、これまでのところうまくいきました。私はWindowsの男です。私は輝くものが好きです。 –

答えて

1

純粋に技術的な面では、パッチはファイル全体よりもはるかにコンパクトで、たくさん使うとストレージと帯域幅が節約されると思います。

もちろん人間側にもあります。あなたは7年後に触れられていないコードを取り上げていますが、開発チームの一員であれば、コードの知識が十分にあるので、diffによって正確な情報が得られます必要です。提案されたコードの変更について議論するとき、プログラマーはコンテキストが何であったか、どのような機能が変更されたのかなどを正確に知っていたでしょう。

基本的にパッチは短期間では良いですが、長い間、ファイル全体が必要になります。

+1

これらの理由は、誤って他の人の変更を上書きすることなく、パッチを適用するという考え方と同じくらい重要ではありませんが、ファイル全体は変更できません。 –

7

のパッチは、コードのほんの一部にしか影響しないため、正確には役に立ちます。オープンソースプロジェクトに取り組んでいる開発者の場合を考えてみましょう。誰かがコードを1週間ダウンロードし、次の週に開発者に変更を提出します。開発者は既にそのソースファイルを処理している可能性があるので、他のものはすでに変更されています。パッチファイルを使用すると、開発者はパッチを既存のソースコードに適用することができ、patchプログラムはそれが適用され適用される場所を見つけます。

寄稿者が何が変更されたかを特定せずにファイル全体を送信した場合、開発者は提出者が変更したコードの以前のバージョンを知ることができません。この場合、開発者はどのように最新のコードにパッチを適用しますか?

投稿者が投稿した変更を確認したい場合は、小さな変更のために「ああ、ちょうどそのビットを変更しました」と言い換えて移動することができます。より複雑な変更を行うには、プロジェクトの一時コピーにパッチを適用し、視覚的なdiffプログラムを使用して、変更をより簡単に表示する方法があります。

1

パッチを送信することで、他の変更によって正確に一致しなくても、コンテキストの変更を表示することができます。ファイル全体を送信すると、ファイルを受け取った人があなたが変更したビットを知ることが不可能であり、あなたが(誤って)他の人から戻ってくる変更がどのビットであるかを知ることはできません。ビジュアル差分ツールとソースコントロールシステムを使用して、パッチの正確な効果を表示できます。一言で言えば、彼らはより実用的で、扱いが簡単です。

現代のソース管理システムは、同じ理由で、また帯域幅を節約するために、ファイル全体ではなくチェンジセット(基本的にパッチ)を送信します。

+0

**ファイル全体を送信した場合、ファイルを受け取った人があなたが変更したビットを知ることは不可能であり、あなたが(意図的に)他の人から元に戻す変更はどのビットであるのかを知ることはできません。私は(CompareIt)を使用している視覚的なdiffツール、私は即座にコードの塊が移動されても、上書きしている私のファイルの部分を見ることができます - これらの点線で接続されてショー。私は、パッチファイルが視覚的な差異よりもはるかに明確である例をまだ見ていません。おそらくいくつかのスクリーンショットをチェックしますか? http://grigsoft.com/wc3pics.htm –

0

パッチの影響がすぐにわからない場合は、視覚的な比較ツールを使用することは賢明だと思います。だからあなたはそれを効率的に行う方法が必要です。

は、私は、実際にパッチが何をしているのか見 にfile.origし、ファイル上の視覚 差分ツールを使用して、ファイルに パッチを実行している、file.origとして 元のファイルのコピーを作成することになりました。

ソース管理にコミットしている場合は、自分のファイルに直接パッチを適用してから、お気に入りのソース管理差分ツールを使用して変更内容を表示できます。

関連する問題