GNU/Linux >> Linux の 問題 >  >> Linux

Linuxの差分とパッチを使用してファイルを共同編集する

たくさんのテキストファイルを編集しています。時々それはコードです。また、ロールプレイングゲーム(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 waterPour 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など、慎重に構造化されたファイルは、差分、パッチ適用、および保守が簡単です。


Linux
  1. diff および apply コマンドを使用して GIT でパッチを作成および適用する方法

  2. 7 Linux で差分パッチ ファイルを適用するパッチ コマンドの例

  3. Linux で kbhit() と getch() を使用する

  1. Linux.htaccessのヒントとコツ

  2. Linux 上の大きなファイルのバイナリ diff/パッチ?

  3. Linux シェルで rz と sz を使用する

  1. Linux で GnuPG を使用してファイルを暗号化および復号化する方法

  2. 「fsck」と「tune2fs」を使用した Linux ファイルシステムの保守

  3. Linux でサポートおよび推奨されるファイル システム