146

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

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

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

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

4

23 に答える 23

32

パッチを適用する

TortoiseMergeを使用する場合:

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

TortoiseMergeから開く場合の代替画面。以下の画面では、ディレクトリは上記の手順2で説明した「マージ」ディレクトリを指します。 Screeny

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

于 2011-03-24T07:16:39.517 に答える
21

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

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

pip install patch
python -m patch
于 2012-02-28T15:48:08.313 に答える
18

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

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

于 2010-09-28T17:17:11.587 に答える
16

GUI の方がいいとおっしゃっていましたが、コマンドライン ツールがうまく機能します。Unix ツールの Windows への移植については、GnuWinを参照してください。明らかに patch コマンドが必要です ;-)

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

于 2010-04-19T11:33:12.693 に答える
7

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

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

簡単な使い方:

patch.exe -i <patchfile>

さらにヘルプを得る:

patch.exe --help
于 2013-01-08T14:23:05.827 に答える
7

TortoiseSVN では、パッチ適用は機能します。から作成されたのと同じディレクトリにパッチを適用する必要があります。このことを常に心に留めておくことが重要です。TortoiseSVN で行う方法は次のとおりです。

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

幸運を。

于 2009-02-05T18:42:43.913 に答える
2

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

前:

--- 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)
于 2010-05-10T06:26:12.090 に答える
2

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

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

于 2009-02-05T21:05:05.453 に答える
2

私はすでに差分とマージに BeyondCompare (商用) を使用しています。このツールには、パッチを作成、表示、適用する機能もあります。

于 2016-07-26T12:19:45.997 に答える
1

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

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

于 2013-05-08T09:07:07.730 に答える
1

Eclipse でそれができるはずです。TeamSynchronize パースペクティブに移動し、[プロジェクト] -> [パッチの適用] に移動します。

于 2013-06-12T10:01:50.133 に答える
1

パッチは、適用するファイルを指定します。ヘッダーは次のようになります (メモ帳またはお気に入りのテキスト エディターで表示します)。

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

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

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

于 2009-02-05T18:46:43.937 に答える
0

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

于 2011-07-18T21:16:41.820 に答える
0

Windows 用のBusyBoxポートには diff コマンドと patch コマンドの両方がありますが、これらは統一された形式しかサポートしていません。

于 2015-07-25T18:37:43.607 に答える
0

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

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

于 2009-02-05T18:43:26.080 に答える
0

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

于 2013-08-24T12:51:29.693 に答える