5

たとえば、2つのファイルがある場合:

file1:

This is file 1

およびfile2:

This is file 2

次のコマンドでパッチを作成します。

diff -u file1 file2 > files.patch

結果は次のとおりです。

--- file1       Fri Aug 13 17:53:28 2010
+++ file2       Fri Aug 13 17:53:38 2010
@@ -1,1 +1,1 @@
-This is file 1
+This is file 2

次に、patchコマンドを使用してこのパッチをSolarisに適用しようとすると、次のようになります。

patch -u -i files.patch

ハングアップします:

 Looks like a unified context diff.
File to patch:

1.統合された差分でSolarisネイティブパッチコマンドを使用する方法はありますか?

2.統一フォーマットを適用できない場合、どの差分フォーマットが最も移植性が高いと考えられますか?

更新: 質問の最初の部分で答えを見つけました。2番目のファイル(この場合はfile2 patch)が最初のファイル(file1)と同じフォルダーに存在する場合、Solarisでハングするようです。たとえば、次の非常に一般的な差分:

--- a/src/file.src       Sat Aug 14 23:07:29 2010
+++ b/src/file.src       Sat Aug 14 23:07:37 2010
@@ -1,2 +1,1 @@
-1
-
+2

非常に一般的なパッチコマンドでは機能しません:

patch -p1 -u -d a < file.patch

次の差分(2番目のファイルの名前が変更されていることに注意してください):

--- a/src/file.src       Sat Aug 14 23:07:29 2010
+++ b/src/file_new.src       Sat Aug 14 23:07:37 2010
@@ -1,2 +1,1 @@
-1
-
+2

完璧に動作します。

私の質問の2番目の部分については、以下の受け入れられた回答を参照してください。

4

3 に答える 3

6

Solaris/usr/bin/patchでは、いくつかの古い標準に準拠するために必要な古いバージョンです。/usr/bin/gpatchSolaris 8 以降では、最新バージョンの GNU パッチが提供されています。

于 2010-08-13T15:36:04.280 に答える
2
diff -cr old.new new.txt > patch.txt

gpatch -p0 < patch.txt

私にとっては完璧に動作します(gpatchを使用)

于 2012-03-02T18:12:27.783 に答える
1

単一の Unix v2 と v3 はどちらもコンテキスト差分をサポートしていますが、統合差分はサポートしていません。そのため、移植性を高めるには、コンテキスト差分を使用する必要があります (と の-cオプション)。diffpatch

古い Solaris リリース (10 より前だと思います) では、が の/usr/xpg4/bin/usr/binにあることを確認する必要があります$PATH。そうしないと、標準のユーティリティではなく、一部のユーティリティの互換バージョンが取得される可能性があります。

于 2010-08-13T18:54:27.150 に答える