Apakah mungkin untuk mengatakan patch
untuk tidak membuat .orig
dan .rej
file? Saya merasa sangat menjengkelkan bahwa tambalan membuat ini.
Apakah mungkin untuk mengatakan patch
untuk tidak membuat .orig
dan .rej
file? Saya merasa sangat menjengkelkan bahwa tambalan membuat ini.
Jawaban:
Jika Anda tidak memberikan opsi apa pun patch
selain -pN
, itu hanya membuat file-file itu ketika tambalan gagal diterapkan dengan bersih.
Jadi, satu opsi adalah berhenti membuat (atau menerima) tambalan buruk. :)
Kembali ke dunia nyata, ini adalah fitur. Ketika patch(1)
gagal menerapkan segmen tambalan ke file asli, itu menyimpan file asli sementara menyalin keluar sebagai *.orig
, dump segmen ditolak *.rej
, dan terus mencoba menerapkan segmen tambalan. Idenya adalah bahwa Anda dapat membuka *.rej
file dan menyelesaikan proses patch secara manual dengan menyalin bit dan potongan ke file yang ditambal. The *.orig
File juga dapat berguna ketika proses patch yang sengaja bangkai kapal sesuatu, dan Anda perlu untuk merujuk ke versi asli untuk memperbaikinya.
Saya tidak selalu memperbaiki tambalan yang buruk dengan teks dari file *.rej
dan *.orig
, tapi itu bagus untuk memilikinya jika saya membutuhkannya.
Setelah saya memperbaiki tambalan yang buruk, saya menjalankan skrip berikut di root proyek untuk dengan cepat membersihkan:
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
Saya menyebutnya cleanup-after-bad-patch
karena nama panjang memastikan tidak menjalankan ini secara tidak sengaja, karena itu bisa menghapus file yang masih Anda butuhkan. Sejujurnya, saya biasanya menjalankannya dengan mengetik clean
TabEnter, itu sudah cukup untuk menemukan skrip ini di PATH
mesin pengembangan saya.
Pola tambahan yang diperiksa adalah untuk output file oleh sistem kontrol versi pilihan saya ketika menemui masalah yang sama selama operasi penggabungan. Anda mungkin ingin menyesuaikannya untuk alat VCS / SCM Anda .
Untuk memberi tahu tambalan untuk tidak menghasilkan cadangan cukup abaikan -b
dan --backup-...
opsi apa pun .
Untuk menginstruksikannya untuk tidak membuat .rej
file, tambahkan -r -
opsi ke perintah.
GNU patch 2.6
mac mungkin mencoba-r /dev/null
The --no-backup-if-mismatch
pilihan akan menghindari ".orig" file.
Anda mungkin juga ingin mencoba --merge
opsi tersebut, yang menciptakan konflik dalam file.
Dalam semua kasus, Anda harus memiliki beberapa cara untuk kembali ke keadaan baik dengan cepat jika penggabungan menjadi luar biasa.
Saya terjebak dengan patch v2.5.4 di mana -r -
menyebabkannya membuat file tolak bernama -
.
Saya menemukan bahwa --reject-file=
nilai kosong menyebabkan patch gagal dengan kode keluar 2
JIKA mencoba menulis file tolak. Jika tidak ada penolakan, itu berfungsi seperti yang diharapkan. Meskipun bukan solusi lengkap untuk versi tambalan yang lebih lama, dalam kondisi tertentu ini mungkin dapat diterima atau diinginkan.
Yang terbaik yang bisa saya dapatkan (diakui cara untuk menyapu kotoran di bawah permadani) adalah menggunakan -r <tmpfile>
, yaitu:
# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
sejak di v2.5.8, -r -
sebenarnya membuat -
file.
patch -p1 -B / dev / null -r - <file.patch
-B
flag tidak mengirimkan *.orig
output /dev/null
, seperti yang terlihat dari perintah Anda. Kebetulan pengguna normal tidak dapat menulis ke file yang disebut hal-hal seperti /dev/nullfoo.cpp
. Jika Anda melakukan ini sebagai root, Anda akan mendapatkan sampah di /dev
pohon Anda . Kedua, -r -
tidak menekan *.rej
file. Tampaknya hanya melakukan itu karena kesalahan karena -B
bendera palsu menghentikannya menunjukkan kepada Anda apa yang sebenarnya akan dilakukan tanpa -B
, yang membuat file yang disebut -
di direktori saat ini.
man patch
: "-r Masukan tolak ke dalam file tolak sebagai pengganti .rej file default. Ketika tolak ke file adalah -, buang tolak."