Jawaban:
Cara paling umum untuk membuat tambalan adalah dengan menjalankan diff
perintah atau diff
perintah bawaan seperti kontrol versi . Terkadang, Anda hanya membandingkan dua file, dan Anda menjalankan diff
seperti ini:
diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch
Kemudian Anda mendapatkan tambalan yang berisi perubahan untuk satu file dan tidak mengandung nama file sama sekali. Ketika Anda menerapkan tambalan itu, Anda perlu menentukan file mana yang ingin Anda terapkan untuk:
patch <alice_to_bob.patch version2_by_alice.txt
Seringkali, Anda membandingkan dua versi dari proyek multi-file yang terkandung dalam direktori. Doa khas diff
penampilan seperti ini:
diff -ru old_version new_version >some.patch
Kemudian tambalan berisi nama file, diberikan dalam baris header seperti diff -ru old_version/dir/file new_version/dir/file
. Anda perlu memberitahu patch
untuk menghapus awalan ( old_version
atau new_version
) dari nama file. Itu -p1
artinya: menghapus satu tingkat direktori.
Terkadang, baris header di tambalan berisi nama file secara langsung tanpa lead-up. Ini biasa terjadi pada sistem kontrol versi; misalnya cvs diff
menghasilkan garis tajuk yang terlihat seperti diff -r1.42 foo
. Maka tidak ada awalan untuk dihapus, jadi Anda harus menentukan -p0
.
Dalam kasus khusus ketika tidak ada subdirektori di pohon yang Anda bandingkan, tidak ada -p
opsi yang diperlukan: patch
akan membuang semua bagian direktori dari nama file. Tetapi sebagian besar waktu, Anda perlu salah satu -p0
atau -p1
, tergantung pada bagaimana patch diproduksi.
diff old/foo new/foo >my.patch
atau diff ../old/foo foo >my.patch
atau diff foo.old foo >my.patch
dan pengguna dapat menerapkannya patch <my.patch
tanpa harus peduli bagaimana tambalan diproduksi, dan kemudian -p
ditambahkan sebagai kenyamanan. Tetapi saya tidak benar-benar tahu, patch
ini adalah utilitas lama dan pada saat saya mulai menggunakannya -p0
atau -p1
sudah merupakan cara yang paling umum untuk menggunakannya.
Dari pria itu:
-pnum
atau--strip=num
Strip awalan terkecil yang mengandung garis miring num terkemuka dari setiap nama file yang ditemukan dalam file patch. Urutan satu atau lebih garis miring yang berdekatan dihitung sebagai garis miring tunggal. Ini mengontrol bagaimana nama file yang ditemukan dalam file tambalan diperlakukan, jika Anda menyimpan file Anda di direktori yang berbeda dari orang yang mengirim tambalan. Misalnya, seandainya nama file dalam file tambalan adalah:/u/howard/src/blurfl/blurfl.c
Pengaturan
-p0
memberi seluruh nama file tidak dimodifikasi ,-p1
memberiu/howard/src/blurfl/blurfl.c
tanpa garis miring ,
-p4
berikanblurfl/blurfl.c
Perbedaannya adalah bahwa angka setelah -p
akan menentukan jumlah komponen jalur yang akan dihapus.
Katakanlah kita memiliki jalan /Barack/Obama
. Menjalankan tambalan di atasnya dengan -p0
argumen akan memperlakukan path seperti :
/Barack/Obama
Tapi kita bisa memotong jalan sambil menambal:
-p1
akan menghapus root slash (perhatikan bahwa itu hanya akan menjadi Barack sekarang, tanpa slash tersisa untuk itu):
Barack/Obama
-p2
akan menghapus Barack (dan tebasan kanan yang berdekatan):
Obama
Untuk memperluas "mengapa" patch
perilaku ini , baca utas ini .