web-dev-qa-db-ja.com

git diffでパッチを作成

やってみた

git diff 13.1_dev sale_edit > patch.diff

その後、git apply patch.diff別のブランチにあるが、パッチが適用されていない。 git applyで使用できるdiffからパッチファイルを作成するにはどうすればよいですか?

受信したエラー:

$ git apply --ignore-space-change --ignore-whitespace diff.diff 
diff.diff:9: trailing whitespace.

diff.diff:10: trailing whitespace.
    function set_change_sale_date() 
diff.diff:12: space before tab in indent.
      $this->sale_lib->set_change_sale_date($this->input->post('change_sale_date'));
diff.diff:14: trailing whitespace.

diff.diff:15: trailing whitespace.
    function set_change_sale_date_enable() 
warning: application/controllers/sales.php has type 100755, expected 100644
error: patch failed: application/controllers/sales.php:520
error: application/controllers/sales.php: patch does not apply
warning: application/language/english/sales_lang.php has type 100755, expected 100644
error: patch failed: application/language/english/sales_lang.php:134
error: application/language/english/sales_lang.php: patch does not apply
warning: application/libraries/Sale_lib.php has type 100755, expected 100644
error: patch failed: application/models/sale.php:170
error: application/models/sale.php: patch does not apply
warning: application/views/sales/register.php has type 100755, expected 100644
error: patch failed: application/views/sales/register.php:361
error: application/views/sales/register.php: patch does not apply

私はMacでこれを試しています

38
Chris Muench

試してください:

git apply --ignore-space-change --ignore-whitespace patch.diff

git:patch does not apply 」で述べたように、これは以下によって引き起こされる可能性があります。

  • ローカルファイルシステムとリモートリポジトリで行末が異なります。
    ユーザーcore.eol in .gitattributesファイルは適切なアプローチです(「 コミット時にgit force file encoding 」を参照)
  • 実行ビット( 'x')。
    それはあなたをgit config core.filemode false、その後にgit reset --hard HEAD(コミットされていない変更がないことを確認してください。変更しないと失われます)。
26
VonC

パッチを3者間マージとして適用できます。

git diff 13.1_dev sale_edit > patch.diff
git apply -3 patch.diff

手動で解決できるように、競合が発生するはずです。または、パッチをgit-applyに直接パイピングするワンライナーを使用することもできます。

git diff 13.1_dev sale_edit | git apply -3

パッチを元に戻すには:

git diff 13.1_dev sale_edit | git apply -3 -R

(注:これは上記のコマンドと同じですが、パッチファイルを作成する2段階のプロセスはありません)

git help apply

-3, --3way           
When the patch does not apply cleanly, fall back on 3-way merge if 
the patch records the identity of blobs it is supposed to apply to, 
and we have those blobs available locally, possibly leaving 
the conflict markers in the files in the working tree for the user 
to resolve...
16
Jeff Kiiza

ここでは、diffを使用しているブランチで試してみる必要があります。

git diff 13.1_dev sale_edit > patch.diff yourBranch()
1
User123456

Gitバージョン1.9.1では、「git apply」を使用して「git diff」を使用して作成されたパッチを適用すると、同様の苦情が表示されます。

パッチファイル内のスペースとタブが混在している場合、1.9.1 gitで問題が発生しているようです。

warning: squelched 1 whitespace error warning: 6 lines add whitespace errors.

@VonCの答えは役に立たず、私はまだ同じ警告を受け取っています。

最も簡単な解決策は、単に 'patch'コマンドを使用することです。このコマンドは、 'git diff'出力でキャプチャされたすべての変更をターゲットgitディレクトリに正常に適用します。

$ patch --version GNU patch 2.7.1