2011-01-22 21 views
164

my_pcc_branch.patchという特定のパッチがあります。git:パッチは適用されません

私はそれを適用しようとすると、私は次のメッセージを得る:それはどういう意味

$ git apply --check my_pcc_branch.patch 
warning: src/main/java/.../AbstractedPanel.java has type 100644, expected 100755 
error: patch failed: src/main/java/.../AbstractedPanel.java:13 
error: src/main/java/.../AbstractedPanel.java: patch does not apply 

を?

この問題を解決するにはどうすればよいですか?

+0

AbstractedPanel.java.rejファイルがありますか?典型的なことは、ラインボットがソースとパッチで変更されたことを意味します(ここでは13行目が影響を受けるようです)。 – Rudi

+0

いいえ、* .rejファイルが見つかりませんでした。 –

答えて

231

ヨハネス・シックスは、以下のコマンドライン引数を使用して提案:

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

これは私の問題を解決しました。

+1

ありがとう!このためにエイリアスを追加しました。 :) –

+22

誰も私を助け、なぜこれが機能するのか説明できますか?もう一つの答えは私のためには機能しませんでした。質問者が説明したのとまったく同じ問題がありました。ファイル属性は空白を無視して何をする必要がありますか? – skrebbel

+0

windows powershellを使うgit diffで作られたパッチは次のようにうまく適用されました:git diff HEAD..613fee - myfile.xml | git apply --ignore-space-change --ignore-whitespace、誰も同じ問題に遭遇した場合にファイルとしてのdiff出力を最初に保存するのに対して – tjb

10

Windowsに実際に "x"ビットの概念がないため、Windowsのrw-r--r--(0644)ファイルのチェックアウトがmsysのPOSIXレイヤーによって "昇格"されるため、UNIXとWindowsのgitクライアントを混在させるとrwx-r-xr-x(0755)となります。 gitはそのモードの違いを基本的にファイル内のテキストの違いとみなし、パッチは直接適用されません。私はあなたの唯一の良いオプションは、core.filemodefalsegit-configを使用)に設定することです。

は、ここではいくつかの関連情報とmsysgit問題だ:[email protected]メーリングリストからhttp://code.google.com/p/msysgit/issues/detail?id=164(archive.orgの2013年12月3日のコピーに再ルーティング)

+2

私はコマンド "git config core.filemode false"を実行しようとしましたが、それは役に立たなかった - 私はまだ同じメッセージを得ています。 –

+0

あなたのツリーにコミットされていない変更がないと仮定して 'git reset --hard HEAD'を実行すると、gitは新しいオプションを使ってファイルを再チェックアウトします。 –

+0

"git reset -hard HEAD"を実行してみました。それは成功しました(私は "HEAD is now ..."というメッセージを見ましたが)、 "git apply"の問題はそのままです。 –

159

git apply --reject --whitespace=fix mychanges.patch私のために働いた。

+4

これは実際に私のファイルを完全に変更しなかったので、実際には私のためにうまくいった –

+3

これは素晴らしいです。自分で解決できないものを拒否するだけで、拒否されたファイルを手動で変更することができます。 – Dennis

+0

パッチ-p1 .origと .rejパッチが作成され、手動で変更を適用できます。私はgit applyを推測しています--rejectは同じで、--whitespace = fixは魔法的に優れています。 – gaoithe

33

このコマンドは、それが*.rejとして悪いのファイルを残して解決していないパッチを適用します。

git apply --reject --whitespace=fix mypath.patch 

はちょうどそれらを解決する必要があります。解決実行すると:

他のすべてが失敗した
git -am resolved 
+5

'* .rej'を解決する方法 - 私が見つけることができるのは、ソースファイルで手動で変更を行い、これらの' .rej'ファイルを削除することです。その他の方法で ? –

+1

@coding_idiotいつもどおり、.rejファイルをチェックし、競合するファイルと比較して、最後に固定ファイルをインデックスに追加します( "git add FIXED_FILES"を使用) –

+0

git _commit_ -am解決済みを意味しましたか? – Zonko

1

git apply's --3way optionを試してみてください。

git apply --3way patchFile.patch

--3way
パッチがきれいに適用されない、3ウェイに頼る パッチは、適用することになっているブロブのアイデンティティを記録し、我々 場合マージそれらのブロブをローカルで使用できるようにしてください。おそらく、ユーザーが解決できるように、作業ツリー内のファイル内に矛盾が残っています( )。この オプションは--indexオプションを意味し、 --rejectオプションと--cachedオプションと互換性がありません。

典型的な失敗のケースはできるだけ多くのパッチに当てはまり、矛盾を残してgitで解決しますが、通常はそうします。おそらく、reject代替品よりも一歩簡単です。

関連する問題