git: patch tidak berlaku

Saya memiliki sebuah patch yang disebut my_pcc_branch.patch.

Ketika saya mencoba untuk menerapkan itu, saya mendapatkan pesan berikut:

$ 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

Apa artinya?

Bagaimana saya bisa memperbaiki ini masalah?

Mengomentari pertanyaan (3)
Larutan

Johannes Sixt dari msysgit@googlegroups.com mailing list disarankan menggunakan berikut argumen baris perintah:

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

Ini memecahkan masalah saya.

Komentar (9)

git menerapkan --menolak --spasi=memperbaiki mychanges.patch bekerja untuk saya.

Komentar (8)

Ketika semuanya gagal, cobalah git menerapkan's --3way option.

git menerapkan --3way patchFile.patch

--3way Ketika patch tidak berlaku bersih, jatuh kembali pada 3-cara gabung jika patch catatan identitas gumpalan itu seharusnya berlaku untuk, dan kita memiliki gumpalan itu tersedia secara lokal, mungkin meninggalkan konflik penanda pada file di tree kerja bagi pengguna untuk menyelesaikan. Ini pilihan menyiratkan --indeks pilihan, dan tidak kompatibel dengan --menolak dan --cached pilihan.

Khas gagal berlaku sebanyak patch seperti itu, dan meninggalkan anda dengan konflik untuk bekerja di git namun biasanya anda melakukannya. Mungkin satu langkah lebih mudah daripada yang menolak alternatif.

Komentar (4)

Perintah ini akan menerapkan patch tidak menyelesaikan itu meninggalkan bad file *.rej:

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

Anda hanya harus mengatasi mereka. Setelah diselesaikan run:

git -am resolved
Komentar (5)

Hal ini terjadi ketika anda mencampur UNIX dan Windows git klien karena Windows doesn't benar-benar memiliki konsep "x" sedikit sehingga anda checkout dari rw-r--r-- (0644) file di Windows adalah "promosi" oleh msys POSIX layer menjadi rwx-r-xr-x (0755). git menganggap bahwa mode perbedaan pada dasarnya sama seperti tekstual perbedaan dalam file, sehingga anda patch tidak langsung berlaku. Saya pikir satu-satunya pilihan yang baik di sini adalah untuk mengatur inti.filemode menjadi false (menggunakan git-config`).

Berikut ini's msysgit masalah dengan beberapa info terkait: http://code.google.com/p/msysgit/issues/detail?id=164 (dialihkan untuk arsip.org's 3 Dec 2013 copy)

Komentar (3)

Coba gunakan solusi yang disarankan berikut ini: https://www.drupal.org/node/1129120

patch -p1 < contoh.patch

Ini membantu saya .

Komentar (1)

Dalam kasus saya, saya cukup bodoh untuk membuat patch file yang salah di tempat pertama, benar-benar diff-ing dengan cara yang salah. Aku berakhir dengan sama persis pesan kesalahan.

Jika anda'kembali pada master dan melakukan git diff cabang-nama > cabang-nama.patch, ini mencoba untuk menghapus semua penambahan yang anda inginkan terjadi dan sebaliknya (yang tidak mungkin untuk git untuk mencapai karena, jelas, tidak pernah dilakukan penambahan tidak dapat dihapus).

Jadi pastikan anda checkout ke cabang anda dan jalankan git diff guru > cabang-nama.patch

Komentar (0)

Saya telah menemukan link ini

Aku tidak tahu mengapa ini bekerja tapi saya mencoba banyak pekerjaan arounds dan ini adalah hanya salah satu yang bekerja untuk saya. Singkatnya, menjalankan tiga perintah di bawah ini:

git fsck --full
git reflog expire --expire=now --all
git gc --prune=now
Komentar (0)