たくさんのテキストファイルを編集しています。時々それはコードです。また、ロールプレイングゲーム(RPG)、プログラミングブック、または一般的な通信のために書かれた言葉です。変更を加えるのは良いこともありますが、私の共同作業者が私の変更を元々書いたものと比較するために。多くの人は、コメントや変更追跡機能を使用して、デフォルトでLibreOfficeなどのオフィススイートを使用します。ただし、単純なツールの方が理にかなっている場合もあります。そのためには、diff
などのツールのプログラミング履歴を確認できます。 およびpatch
、共有ファイルへの変更を追跡および適用するための標準化されたフォーマットを提供します。
その他のLinuxリソース
- Linuxコマンドのチートシート
- 高度なLinuxコマンドのチートシート
- 無料のオンラインコース:RHELの技術概要
- Linuxネットワーキングのチートシート
- SELinuxチートシート
- Linuxの一般的なコマンドのチートシート
- Linuxコンテナとは何ですか?
- 最新のLinux記事
単純なファイルでも、2つのドキュメントの同期は複雑です。一部のアイテムは変更され、他のアイテムはそのままにされ、新しいコンテンツが追加され、一部は同じままですが、ドキュメント内の別の場所に移動されます。すべての変更が同等に有効であることを喜んで受け入れ、古いファイルを新しいファイルに置き換えることなく、変更を複製することは困難です。また、モノリシックに不透明です。変更が非常に多いため、変更内容を正確に特定することは困難です。
diff
を使用 コマンドを使用すると、ファイルがどのように変更されたかの記録を作成できます。patch
古いバージョンに対するこれらの変更を「再生」して、新しいバージョンで最新の状態にすることができます。
セットアップ
あなたと私がお茶の作り方を説明するファイルで共同作業しているとします。
これまでのところ、ファイルtea.md
生のコピー&ペーストが含まれています:
Boil water.
Warm the teapot.
Add tea and water to the teapot.
Place a tea cosy over the teapot.
Steep for 6 minutes.
Pour tea into cup.
Add milk.
合理的なようですが、常に最適化できるので、改善のためにファイルを私に送ってください。お茶の製造プロセスを明確にするために、ファイルをtea-revision.md
としてコピーします。 そしてそれを編集して、これで終わります:
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.
予想通り、いくつかのアイテム(Boil water
とPour tea into cup
)は変更されていませんが、他の行(Warm the teapot
)追加されました。一部の行は完全に新しく、一部の行は同じですが順序が異なります。
差分を作成する
diff
ツールは2つのファイルの違いを表示します。結果を表示する方法はいくつかありますが、最も明確な方法は--unified
だと思います。 (-u
略して)ビュー。どの行が加算または減算されたかを示します。何らかの方法で変更された行は、減算されてから加算された行として扱われます。デフォルトでは、diff
出力を端末に出力します。
diff
を提供する 古いファイル、次に新しいファイルを使用します:
$ diff --unified tea.md tea-revised.md
--- tea.md 2021-11-13 10:26:25.082110219 +1300
+++ tea-revised.md 2021-11-13 10:26:32.049110664 +1300
@@ -1,7 +1,7 @@
+Warm a teapot in the proving drawer of your oven.
Boil water.
-Warm the teapot.
-Add tea and water to the teapot.
-Place a tea cosy over the teapot.
-Steep for 6 minutes.
+Add tea leaves to a tea strainer.
+Add strainer and water to teapot.
+Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
-Add milk.
+Optionally, add warm milk.
プラス記号(+
)行の先頭は、古いファイルに追加されたものを示します。マイナス記号(-
)行の先頭は、削除または変更された行を示します。
diffを使用してパッチを作成する
パッチファイルは、diff --unified
の出力にすぎません。 コマンドをファイルに配置します。これは、標準のBashリダイレクトを使用して行うことができます:
$ diff -u tea.md tea-revised.md > tea.patch
ファイルの内容は、端末に出力されたものとまったく同じです。私はEmacsでパッチファイルを表示するのが好きです。パッチファイルは、追加されたか削除されたかに応じて各行を色分けします。
パッチによる変更の適用
パッチファイルを入手したら、それを送信して確認し、オプションで古いファイルに適用することができます。 patch
を使用してパッチを適用します コマンド:
$ patch tea.md tea.patch
行が追加され、行が減算され、最終的に、私のバージョンと同じファイルになります:
$ cat tea.md
Warm a teapot in the proving drawer of your oven.
Boil water.
Add tea leaves to a tea strainer.
Add strainer and water to teapot.
Steep for 6 minutes. Keep it warm with a tea cosy.
Pour tea into cup.
Optionally, add warm milk.
ファイルにパッチを適用できる回数に制限はありません。あなたは私の変更を繰り返し、新しいパッチを生成し、それをレビューのために私に送ることができます。結果ではなく変更を送信することで、各寄稿者は何が変更されたかを確認し、何を保持または削除するかを決定し、プロセスを正確に文書化できます。
インストール
LinuxとmacOSでは、すでに両方のdiff
があります およびpatch
コマンド。 Windowsでは、diff
を取得できます およびpatch
Cygwinを使用するか、Chocolateyを使用してdiffutilsとパッチを検索します。
メールやチャットでファイルを共同編集しようとしたことがあり、説明しようとしていることに気付いた場合 変更が必要な場合は、diff
を気に入るはずです。 およびpatch
。コードや行区切りのMarkdownなど、慎重に構造化されたファイルは、差分、パッチ適用、および保守が簡単です。