Apa perbedaan antara patch -p0
dan patch -p1
?
Apakah ada perbedaan sama sekali?
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
ataudiff ../old/foo foo >my.patch
ataudiff foo.old foo >my.patch
dan pengguna dapat menerapkannyapatch <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:
sumber
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 :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):-p2
akan menghapus Barack (dan tebasan kanan yang berdekatan):Untuk memperluas "mengapa"
patch
perilaku ini , baca utas ini .sumber