cpを使用する方が簡単ですが、diff / patchを使用する理由

cpを使用する方が簡単ですが、diff / patchを使用する理由
diff -u file1.txt file2.txt > patchfile

patchfile1.txtをfile2.txtとまったく同じに変換するための指示を含むパッチファイルを作成します。

cp命令語にしてはいけませんか?ファイルが大きすぎてネットワーク経由で転送する必要がある場合は、このアプローチが帯域幅を節約するのに役立ちます。他のシナリオで有益なdiff / patchを使用する他の方法はありますか?

ベストアンサー1

違いは、単にあるファイルを他のファイルと比較するよりも複雑です。ディレクトリ階層全体を比較できます。 GCCでバグを修正する例を考えてみましょう。私の変更により、4〜5個のファイルに1〜2行が追加され、このファイルと他のファイルからいくつかの行が削除されました。これらの変更を誰かに(おそらくGCCに)伝えたい場合は、私の選択は次のようになります。

  • フルソースツリーのコピー
  • 変更されたファイルのみコピー
  • 私が変更したものだけを使用できます。

ソースツリー全体をコピーすることは意味がありませんが、他の2つのオプションはどうですか?これが問題の核心です。さて、他の人が私と同じファイルを扱っていて、私たちの両方が誰かに変更を伝えるとしましょう。この人は、私たちが行ったことと変更が互換性があるのか​​(ファイルの他の部分)、競合しているのか(ファイルの同じ行)をどうやって知ることができますか?彼はそれらを区別します! diffは、ファイルがどのように異なるのか、そして変更されていないソースファイルとどのように異なるかを知らせることができます。 diffが必要な場合は、diffを最初に送信する方が合理的です。違いには複数のファイルの変更が含まれる可能性があるため、合計9つのファイルを編集しましたが、変更を説明する単一のdiffファイルを提供できます。

違いを使用して過去の履歴を提供することもできます。 3ヶ月前の変更が今日で見つかったバグが発生した場合はどうすればよいですか?エラーが発生した期間を絞り込んで特定の変更に分離できる場合は、diffを使用して変更を「元に戻す」または元に戻すことができます。ファイルだけをコピーしても簡単な作業ではありません。

ファイルの記録を生成から現在までの一連の違いで記録するプログラムであるソースバージョン制御に関するものです。違いは記録を提供し(いつでもファイルを元に戻すことができます)、何かを破った責任が誰であるかを知ることができ(違いは所有者です)、特定の違いを上流のプロジェクトに提供することで簡単に提供できます。アップストリームプロジェクトへの変更をコミットします。 (おそらく私が多くの変更を適用したとき、彼らは1つの変更にのみ興味があるでしょう。)

要約すると、そうです。cpANDよりも簡単ですが、ファイルの変更の追跡が重要な場合よりもANDの使いやすさが高くなります。diffpatchdiffpatchcp

おすすめ記事