web-dev-qa-db-ja.com

Windowsでdiffパッチを適用するにはどうすればよいですか?

差分パッチを作成できるプログラムはたくさんありますが、私はそれを適用しようとかなりの時間を費やしています。パッチを配布しようとしていますが、ユーザーからパッチの適用方法について質問を受けました。だから私は自分でそれを理解しようとしましたが、私には手がかりがなく、見つけられるツールのほとんどはコマンドラインです。 (コマンドラインは処理できますが、ニースで使いやすいGUIがなければ多くの人々が失われます。したがって、これらはこの目的には適していません。)

TortoiseSVNを使用してみました。適用したいパッチがあります。パッチを右クリックすると、TortoiseSVNサブメニューの下に「パッチを適用」というオプションがあります。空のウィンドウをプルアップするだけです。

そこで、Openを押してみました。統合diffのマージと適用の2つのオプションがあります。 (幸いなことに、パッチは統合diff形式です。)しかし、単純な適用オプションは機能しません。パッチとフォルダを要求します。どういうわけかパッチを適用するファイル!を要求するのを忘れていたため、TortoiseSVNは単純に機能しません。パッチとファイルを取得して適切に適用するWindows GUIベースのユーティリティはありますか?

編集:これまでの返信を見ると、Tortoiseは既にバージョン管理されているファイルの場合にのみ正しく処理されるようです。ここではそうではありません。 SVNリポジトリから出ていないファイルにパッチを適用できるようにする必要があります。 SVNがdiffを使用し、それらの作成と適用の両方を行う方法を知っている必要があることを知っているため、Tortoiseを使用してみました。

130
Mason Wheeler

パッチの適用

TortoiseMergeの場合:

  1. 既存のSVNリポジトリディレクトリを見つけて開く
  2. 「merges」という名前の新しいディレクトリがまだ存在しない場合は作成します
  3. .patchファイルを適用するファイルをコピーします
  4. 次のステップに進む前にsvnリポジトリに追加およびコミット
  5. マージを右クリックして、パッチを適用...を選択します
  6. リストからファイルをダブルクリックします
  7. 差分のあるパッチが適用されたファイルが右側のペインに表示されます
  8. そのペインをクリックして、保存を押すか、ファイル->名前を付けて保存...でエクスポートします

TortoiseMergeから開くと、別の画面が表示されます。以下の画面では、ディレクトリは上記の手順2で言及した「マージ」ディレクトリを指します。 Screeny

WinMerge GUIのスクリーンショット: Screeny

31
Sheriff Md

TortoiseMerge は、TortoiseSVNにバンドルされている別個のユーティリティです。

TortoiseDiff.Zip アーカイブに個別にダウンロードすることもできます。これにより、統合されていない差分をバージョン管理されていないファイルに適用できます。

19
Paul Shannon

そのために pure Python tool を作成しました。予測可能なクロスプラットフォームの動作があります。このファイルを作成する時点では新しいファイルを作成せず、GUIもありませんが、グラフィックツールを作成するためのライブラリとして使用できます。

UPDATE:Pythonがインストールされている場合は、使用する方が便利です。

pip install patch
python -m patch
17

GUIを好むと言ったのは知っていますが、コマンドラインツールはうまく機能します。 UNIXツールのWindowsへの移植については、 GnuWin を参照してください。当然、パッチコマンドが必要です;-)

ただし、回線の終端で問題が発生する場合があります。 GnuWinポートは、パッチファイルにDOSスタイルの行終端(CR/LF)があると想定します。適度にスマートなエディターでパッチファイルを開くと、変換されます。

15
Sardaukar

TortoiseSVNでは、パッチの適用は機能します。 created fromと同じディレクトリにパッチを適用する必要があります。これに留意することは常に重要です。 TortoiseSVNでの方法は次のとおりです。

パッチを適用するフォルダーを右クリックします。パッチファイルの場所を尋ねるダイアログが表示されます。ファイルを選択すると、変更されたファイルを一覧表示する小さなファイルリストウィンドウが開き、各項目をクリックすると、そのファイルに対するパッチの動作を示す差分ウィンドウが開きます。

幸運を。

8
Dan

パッチユーティリティの this Win32ネイティブポートを使用できます。

それは他のユーティリティのより多くの選択と一緒に来ます、そして、Cygwinなどとは対照的に、それはDLLまたは類似物を必要としません。選択した小さな実行可能ファイルを選択して、必要な場所に保存するだけです。

簡単な使用法:

patch.exe -i <patchfile>

さらにヘルプを得る:

patch.exe --help
7
logisch

Gitインストールのpatch.exeユーティリティは、Windows 10で動作します。

Git for Windows をインストールし、"C:\Program Files\Git\usr\bin\patch.exe"コマンドを使用してパッチを適用します。

パッチの適用中にHunk #1 FAILED at 1 (different line endings).などのエラーメッセージが出力に表示された場合は、-l--ignore-whitespaceのショートカット)または--binaryスイッチをコマンドラインに追加してみてください。

4

編集:これまでの返信を見ると、Tortoiseは既にバージョン管理されているファイルの場合にのみ正しく処理されるようです。ここではそうではありません。 SVNリポジトリから出ていないファイルにパッチを適用できるようにする必要があります。 SVNがdiffを使用し、それらの作成と適用の両方の方法を知っている必要があることを知っているため、Tortoiseを使用してみました。

Cygwin をインストールしてから、コマンドラインpatchツールを使用してパッチを適用できます。 このUnix manページ も参照してください。これはpatchに適用されます。

2
Brian Clapper

TortoiseSVN(TortoiseMerge) diff_patchファイルのIndex: foobar.py行が必要 のようです。これは、TortoiseSVN以外のパッチファイルをTortoiseSVNの右クリックApply()コマンドで機能させるために必要なことです。

前:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

後:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

または、貢献者が作業していた特定のリビジョンを知っている場合:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)
2
matt wilkie

Eclipseはそれを行うことができ、TeamSynchronizeパースペクティブに移動し、次にProject-> Apply patchに移動します。

1
Jose Ospina

Javaプロジェクトの場合、パッチファイルの適用に NetBeans を使用しました。パッチを適用するJavaコードがまだNetBeansプロジェクトでない場合は、そのプロジェクトを作成します。新しいプロジェクトを作成するには:

  • 選択メニューファイル->新規プロジェクト
  • 表示されるダイアログで、Javaアプリケーションプロジェクトにします。ダイアログで名前を付けて、クリックします Finish
  • プロジェクトの名前を右クリックし、コンテキストメニューから[プロパティ]を選択します。
  • 結果のダイアログで、Sourcesを選択し、Source Folderを追加します。 Javaソースを参照します。

プロジェクトができたので、パッチを適用します。

  • プロジェクトをハイライトして選択します
  • メインメニューから、メニューTools->Apply Diff Patchを選択します
  • 表示されるダイアログで、パッチファイルを参照して選択し、[パッチ]ボタンを押します。

それでおしまい。パッチが適用され、変更を示す差分ウィンドウが表示されるはずです。

1
user1984699

Mercurial を使用している場合、これは「インポート」によって行われます。そのため、コマンドラインでhg importコマンド、または(--no-commitオプションが役立つ場合があります)、またはHg Workbenchの[リポジトリ] => [インポート...]を使用します。

これらはデフォルトで変更をコミットすることに注意してください。コマンドラインを使用する場合はhg import --no-commitオプションを使用してこれを回避できます。HgWorkbenchを使用した場合は、マージ後にhg rollbackを発行すると便利な場合があります。

1
Marc Gravell

パッチは、どのファイルに適用するかを指示します。ヘッダーは次のようにする必要があります(メモ帳またはfavテキストエディターで表示)。

--- Folder/old_file
+++ Folder/new_file

Subversionパッチの場合、リビジョン番号もあります(ファイル名が同じであるため)。

GNUパッチ を使用すると、これらの名前をoverrideできますが、同じことを行うGUIツールは知りません。さまざまなdiffプログラムを確認しますが、WinMergeはパッチの適用をサポートしていないようです。

1
Mark Brackett

Windows用の BusyBox ポートにはdiffコマンドとpatchコマンドの両方がありますが、統一フォーマットのみをサポートしています。

0
Meow

差分とマージにはすでにBeyondCompare(商用)を使用していますが、このツールも 機能を備えています を使用してパッチを作成、表示、および適用しています。

0
FourtyTwo

モニターは2つありますか? TortoiseMergeでも同じ問題が発生していましたが、モニターの1つを無効にすると、ファイルリストのある小さなウィンドウが表示されることがわかりました。これがお役に立てば幸いです。

0
Bruno

「作業コピーではありません」というエラーメッセージが表示される場合は、SVNの作業ディレクトリであるTortoiseMergeダイアログボックスからディレクトリを選択してみてください。

0
Vinod Dalvi

使用するだけ:

patch -p0 < path-file.patch

このコマンドは、パッチを作成したフォルダーの場所からのみ実行してください。

0
Ashish Lohia

TortoiseSVNを使用してパッチを適用する場合、通常、チェックアウトしたリポジトリのルートにパスを保存します。その後、パッチを右クリックしてTortoiseSVNメニューに移動し、ApplyPatchをクリックできるようになります。 ApplyPatchは、パッチが作成されたディレクトリ階層のレベルを自動的に判断する必要があります。

しかし、過去に新しいファイルを含むパッチを適用したり、ファイルの名前を変更したりするパッチの適用に問題がありました。 Tortoiseがこれに使用するアルゴリズムが何であれ、これらのシナリオをうまく処理できないようです。 Unicodeでも同様の問題が発生する可能性があります。

0
tsellon

http://www.msys2.org/ からMSYS2を使用します

patchwhichgittreeなどの多くのユーティリティを提供します。

MSYS2をインストールしたら、パッケージマネージャーを実行してpatchをインストールします。

pacman -S patch
0
isapir