差分パッチを作成できるプログラムはたくさんありますが、私はそれを適用しようとかなりの時間を費やしています。パッチを配布しようとしていますが、ユーザーからパッチの適用方法について質問を受けました。だから私は自分でそれを理解しようとしましたが、私には手がかりがなく、見つけられるツールのほとんどはコマンドラインです。 (コマンドラインは処理できますが、ニースで使いやすいGUIがなければ多くの人々が失われます。したがって、これらはこの目的には適していません。)
TortoiseSVNを使用してみました。適用したいパッチがあります。パッチを右クリックすると、TortoiseSVNサブメニューの下に「パッチを適用」というオプションがあります。空のウィンドウをプルアップするだけです。
そこで、Openを押してみました。統合diffのマージと適用の2つのオプションがあります。 (幸いなことに、パッチは統合diff形式です。)しかし、単純な適用オプションは機能しません。パッチとフォルダを要求します。どういうわけかパッチを適用するファイル!を要求するのを忘れていたため、TortoiseSVNは単純に機能しません。パッチとファイルを取得して適切に適用するWindows GUIベースのユーティリティはありますか?
編集:これまでの返信を見ると、Tortoiseは既にバージョン管理されているファイルの場合にのみ正しく処理されるようです。ここではそうではありません。 SVNリポジトリから出ていないファイルにパッチを適用できるようにする必要があります。 SVNがdiffを使用し、それらの作成と適用の両方を行う方法を知っている必要があることを知っているため、Tortoiseを使用してみました。
パッチの適用
TortoiseMergeから開くと、別の画面が表示されます。以下の画面では、ディレクトリは上記の手順2で言及した「マージ」ディレクトリを指します。
WinMerge GUIのスクリーンショット:
TortoiseMerge は、TortoiseSVNにバンドルされている別個のユーティリティです。
TortoiseDiff.Zip アーカイブに個別にダウンロードすることもできます。これにより、統合されていない差分をバージョン管理されていないファイルに適用できます。
そのために pure Python tool を作成しました。予測可能なクロスプラットフォームの動作があります。このファイルを作成する時点では新しいファイルを作成せず、GUIもありませんが、グラフィックツールを作成するためのライブラリとして使用できます。
UPDATE:Pythonがインストールされている場合は、使用する方が便利です。
pip install patch
python -m patch
GUIを好むと言ったのは知っていますが、コマンドラインツールはうまく機能します。 UNIXツールのWindowsへの移植については、 GnuWin を参照してください。当然、パッチコマンドが必要です;-)
ただし、回線の終端で問題が発生する場合があります。 GnuWinポートは、パッチファイルにDOSスタイルの行終端(CR/LF)があると想定します。適度にスマートなエディターでパッチファイルを開くと、変換されます。
TortoiseSVNでは、パッチの適用は機能します。 created fromと同じディレクトリにパッチを適用する必要があります。これに留意することは常に重要です。 TortoiseSVNでの方法は次のとおりです。
パッチを適用するフォルダーを右クリックします。パッチファイルの場所を尋ねるダイアログが表示されます。ファイルを選択すると、変更されたファイルを一覧表示する小さなファイルリストウィンドウが開き、各項目をクリックすると、そのファイルに対するパッチの動作を示す差分ウィンドウが開きます。
幸運を。
パッチユーティリティの this Win32ネイティブポートを使用できます。
それは他のユーティリティのより多くの選択と一緒に来ます、そして、Cygwinなどとは対照的に、それはDLLまたは類似物を必要としません。選択した小さな実行可能ファイルを選択して、必要な場所に保存するだけです。
簡単な使用法:
patch.exe -i <patchfile>
さらにヘルプを得る:
patch.exe --help
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
スイッチをコマンドラインに追加してみてください。
編集:これまでの返信を見ると、Tortoiseは既にバージョン管理されているファイルの場合にのみ正しく処理されるようです。ここではそうではありません。 SVNリポジトリから出ていないファイルにパッチを適用できるようにする必要があります。 SVNがdiffを使用し、それらの作成と適用の両方の方法を知っている必要があることを知っているため、Tortoiseを使用してみました。
Cygwin をインストールしてから、コマンドラインpatchツールを使用してパッチを適用できます。 このUnix manページ も参照してください。これはpatchに適用されます。
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)
Eclipseはそれを行うことができ、TeamSynchronizeパースペクティブに移動し、次にProject-> Apply patchに移動します。
Javaプロジェクトの場合、パッチファイルの適用に NetBeans を使用しました。パッチを適用するJavaコードがまだNetBeansプロジェクトでない場合は、そのプロジェクトを作成します。新しいプロジェクトを作成するには:
プロジェクトができたので、パッチを適用します。
それでおしまい。パッチが適用され、変更を示す差分ウィンドウが表示されるはずです。
Mercurial を使用している場合、これは「インポート」によって行われます。そのため、コマンドラインでhg import
コマンド、または(--no-commit
オプションが役立つ場合があります)、またはHg Workbenchの[リポジトリ] => [インポート...]を使用します。
これらはデフォルトで変更をコミットすることに注意してください。コマンドラインを使用する場合はhg import --no-commit
オプションを使用してこれを回避できます。HgWorkbenchを使用した場合は、マージ後にhg rollback
を発行すると便利な場合があります。
パッチは、どのファイルに適用するかを指示します。ヘッダーは次のようにする必要があります(メモ帳またはfavテキストエディターで表示)。
--- Folder/old_file
+++ Folder/new_file
Subversionパッチの場合、リビジョン番号もあります(ファイル名が同じであるため)。
GNUパッチ を使用すると、これらの名前をoverrideできますが、同じことを行うGUIツールは知りません。さまざまなdiffプログラムを確認しますが、WinMergeはパッチの適用をサポートしていないようです。
Windows用の BusyBox ポートにはdiffコマンドとpatchコマンドの両方がありますが、統一フォーマットのみをサポートしています。
差分とマージにはすでにBeyondCompare(商用)を使用していますが、このツールも 機能を備えています を使用してパッチを作成、表示、および適用しています。
モニターは2つありますか? TortoiseMergeでも同じ問題が発生していましたが、モニターの1つを無効にすると、ファイルリストのある小さなウィンドウが表示されることがわかりました。これがお役に立てば幸いです。
「作業コピーではありません」というエラーメッセージが表示される場合は、SVNの作業ディレクトリであるTortoiseMergeダイアログボックスからディレクトリを選択してみてください。
使用するだけ:
patch -p0 < path-file.patch
このコマンドは、パッチを作成したフォルダーの場所からのみ実行してください。
TortoiseSVNを使用してパッチを適用する場合、通常、チェックアウトしたリポジトリのルートにパスを保存します。その後、パッチを右クリックしてTortoiseSVNメニューに移動し、ApplyPatchをクリックできるようになります。 ApplyPatchは、パッチが作成されたディレクトリ階層のレベルを自動的に判断する必要があります。
しかし、過去に新しいファイルを含むパッチを適用したり、ファイルの名前を変更したりするパッチの適用に問題がありました。 Tortoiseがこれに使用するアルゴリズムが何であれ、これらのシナリオをうまく処理できないようです。 Unicodeでも同様の問題が発生する可能性があります。
http://www.msys2.org/ からMSYS2を使用します
patch
、which
、git
、tree
などの多くのユーティリティを提供します。
MSYS2をインストールしたら、パッケージマネージャーを実行してpatch
をインストールします。
pacman -S patch