Saya memiliki patch tertentu yang disebut my_pcc_branch.patch.
Ketika saya mencoba menerapkannya, saya mendapat 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 masalah ini?
has type 100644, expected 100755
menyiratkan ada ketidakcocokan izin chmod di suatu tempat?Jawaban:
git apply --reject --whitespace=fix mychanges.patch
bekerja untukku.Penjelasan
The
--reject
pilihan akan menginstruksikan git untuk tidak gagal jika tidak dapat menentukan bagaimana menerapkan patch, melainkan untuk menerapkan bakhil indivdual dapat menerapkan dan menciptakan menolak file (.rej
) untuk bakhil itu tidak bisa berlaku. Goyangan dapat "menerapkan tambalan yang ditolak ini dan melakukan perbedaan kata-kata".Selain itu,
--whitespace=fix
akan memperingatkan tentang kesalahan spasi putih dan mencoba memperbaikinya, daripada menolak untuk menerapkan sebongkah yang berlaku.Kedua opsi bersama-sama membuat aplikasi patch lebih kuat terhadap kegagalan, tetapi mereka membutuhkan perhatian tambahan sehubungan dengan hasilnya.
Untuk seluruh dokumentasi, lihat https://git-scm.com/docs/git-apply .
sumber
.rej
file ketika tidak dapat secara otomatis mendeteksi cara menerapkan tambalan. Anda dapat menggunakan goyangan untuk menyelesaikan masalah tersebut.Johannes Sixt dari milis [email protected] disarankan menggunakan argumen baris perintah berikut:
Ini menyelesaikan masalah saya.
sumber
-C1
aktifkan untuk diterapkan, itu mengurangi konteks sekitar penambahan yang dianggap penting.Ketika semuanya gagal, coba
git apply
's--3way
pilihan .git apply --3way patchFile.patch
Kasing kegagalan yang umum berlaku sebanyak patch yang bisa, dan meninggalkan Anda dengan konflik untuk bekerja di git namun Anda biasanya melakukannya. Mungkin satu langkah lebih mudah daripada
reject
alternatifnya.sumber
--3way
harus menjadi perilaku default. Ketika patching gagal, setidaknya beri tahu saya apa yang gagal sehingga saya bisa memperbaikinya secara manual.git apply
hanya gagal dan tidak melaporkan mengapa sesuatu gagal. Saya bahkan tidak dapat menemukan*.rej
file seperti yanghg
dihasilkan.Perintah ini akan menerapkan tambalan yang tidak menyelesaikannya meninggalkan file yang buruk sebagai
*.rej
:Anda hanya perlu mengatasinya. Setelah diselesaikan, jalankan:
sumber
*.rej
- yang bisa saya temukan adalah membuat perubahan secara manual di file sumber & menghapus.rej
file - file ini . Ada cara lain?wiggle --replace path/to/file path/to/file.rej
. Perintah ini akan menerapkan perubahan dari.rej
file ke file asli. Juga membuat salinan file asli, sepertipath/to/file.porig
. Silakan, cek dokumentasi untuk mendapatkan info lebih lanjut tentangCoba gunakan solusi yang disarankan di sini: https://www.drupal.org/node/1129120
patch -p1 < example.patch
Ini membantu saya.
sumber
git: 'patch' is not a git command.
padagit version 2.21.1 (Apple Git-122.3)
Ini terjadi ketika Anda mencampur klien UNIX dan Windows git karena Windows tidak benar-benar memiliki konsep bit "x" sehingga checkout Anda dari file
rw-r--r--
(0644) di Windows "dipromosikan" oleh lapisan POSIX msys menjadirwx-r-xr-x
(0755) . git menganggap bahwa perbedaan mode pada dasarnya sama dengan perbedaan tekstual pada file, jadi tambalan Anda tidak secara langsung berlaku. Saya pikir satu-satunya pilihan yang baik di sini adalah untuk mengaturcore.filemode
kefalse
(menggunakangit-config
).Berikut ini adalah masalah msysgit dengan beberapa info terkait: http://code.google.com/p/msysgit/issues/detail?id=164 (dialihkan ke salinan 3 Desember 2013 archive.org)
sumber
git reset --hard HEAD
untuk memaksa git untuk checkout kembali file Anda dengan opsi baru yang berlaku.Dalam kasus saya, saya cukup bodoh untuk membuat file tambalan secara salah, sebenarnya berbeda dengan cara yang salah . Saya berakhir dengan pesan kesalahan yang sama persis.
Jika Anda menguasai dan melakukannya
git diff branch-name > branch-name.patch
, ini mencoba untuk menghapus semua tambahan yang Anda inginkan terjadi dan sebaliknya (yang tidak mungkin dilakukan oleh git karena, jelas, penambahan yang pernah dilakukan tidak dapat dihapus).Jadi pastikan Anda checkout ke cabang Anda dan jalankan
git diff master > branch-name.patch
sumber
PERINGATAN: Perintah ini dapat menghapus komit yang hilang lama secara PERMANEN. Buat salinan dari seluruh repositori Anda sebelum mencoba ini.
Saya telah menemukan tautan ini
Saya tidak tahu mengapa ini bekerja tetapi saya mencoba banyak pekerjaan dan ini adalah satu-satunya yang bekerja untuk saya. Singkatnya, jalankan tiga perintah di bawah ini:
sumber
Apa yang saya cari tidak tepat ditunjukkan di sini di SO, saya menulis untuk kepentingan orang lain yang mungkin mencari yang serupa. Saya menghadapi masalah dengan satu file (ada di repo lama) dihapus di repo. Dan ketika saya menerapkan tambalan, gagal karena tidak dapat menemukan file yang akan diterapkan. (jadi kasus saya adalah git patch gagal untuk file dihapus) '#git apply --reject' jelas memberikan pandangan tetapi tidak cukup membuat saya untuk memperbaikinya. Saya tidak dapat menggunakan goyangan karena tidak tersedia untuk kami di server build kami. Dalam kasus saya, saya menyelesaikan masalah ini dengan menghapus entri 'file yang dihapus dalam repo' dari file patch yang saya coba terapkan, jadi saya mendapatkan semua perubahan lain yang diterapkan tanpa masalah (menggunakan penggabungan 3 cara, menghindari white space error), Dan kemudian secara manual menggabungkan konten file yang dihapus ke tempat dipindahkannya.
sumber
Masalah saya adalah saya berlari
git diff
, lalu berlarigit reset --hard HEAD
, kemudian menyadari bahwa saya ingin membatalkan, jadi saya mencoba menyalin output darigit diff
ke dalam file dan menggunakangit apply
, tetapi saya mendapat kesalahan bahwa "patch tidak berlaku". Setelah beralih kepatch
dan mencoba menggunakannya, saya menyadari bahwa sepotong diff diulang karena alasan tertentu, dan setelah menghapus duplikat ,patch
(dan mungkin jugagit apply
) bekerja.sumber