Yama eklerken -p0 ve -p1 bağımsız değişkenleri arasındaki fark nedir?


19

Arasındaki fark nedir patch -p0ve patch -p1?

Hiç fark var mı?

Yanıtlar:


23

Bir yama oluşturmanın en yaygın yolu, diffkomutu veya bazı sürüm denetiminin yerleşik diffbenzeri komutunu çalıştırmaktır. Bazen sadece iki dosyayı karşılaştırıyorsunuz ve şöyle çalışıyorsunuz diff:

diff -u version_by_alice.txt version_by_bob.txt >alice_to_bob.patch

Ardından, bir dosya için değişiklikler içeren ve hiç dosya adı içermeyen bir düzeltme eki alırsınız. Bu yamayı uyguladığınızda, hangi dosyayı uygulamak istediğinizi belirtmeniz gerekir:

patch <alice_to_bob.patch version2_by_alice.txt

Genellikle, bir dizinde bulunan tüm çok dosyalı bir projenin iki sürümünü karşılaştırırsınız. Tipik bir diffbakış açısı şöyle görünür:

diff -ru old_version new_version >some.patch

Daha sonra yama, gibi başlık satırlarında verilen dosya adlarını içerir diff -ru old_version/dir/file new_version/dir/file. Ön patcheki ( old_versionveya new_version) dosya adından çıkarmayı söylemeniz gerekir . Bu şu anlama -p1gelir: bir düzey dizini kaldırın.

Bazen, düzeltme eki üstbilgi satırları doğrudan kurşun olmadan dosya adını içerir. Bu, sürüm kontrol sistemlerinde yaygındır; örneğin cvs diff, başlık satırları gibi görünür diff -r1.42 foo. Sonra şeritlenecek önek yoktur, bu yüzden belirtmeniz gerekir -p0.

Özel durumda, karşılaştırdığınız ağaçlarda alt dizin olmadığında, hiçbir -pseçeneğe gerek yoktur : patchdosya adlarının tüm dizin bölümünü atar. Ancak çoğu zaman, yamanın nasıl üretildiğine bağlı olarak ya -p0da ya ihtiyacınız vardır -p1.


Bu beni çok uzun süredir karıştırıyor. Alt dizinlerin davranışı neden -p0'dan farklı? Her zaman -p0'ın varsayılan olduğunu varsaydım, bu yüzden p0 olması gerekiyorsa her zaman sorun yaşadım
Brydon Gibson

@BrydonGibson Başlangıçta fikrin yama yazarının kayıtsız bir şekilde yazabileceği diff old/foo new/foo >my.patchya diff ../old/foo foo >my.patchda diff foo.old foo >my.patchkullanıcının patch <my.patchyamanın nasıl üretildiğine dikkat etmeden uygulayabileceğinden ve daha sonra -pbir kolaylık olarak eklendiğinden şüpheleniyorum . Ama aslında bilmiyorum, patcheski bir yardımcı programdır ve kullanmaya başladığımda -p0ya -p1da onu kullanmanın en yaygın yollarıydı.
Gilles 'SO- kötü olmayı bırak'

16

Adamdan:

-pnum veya --strip=num Düzeltme eki dosyasında bulunan her dosya adından önce sayı eğik çizgi içeren en küçük öneki soyun. Bir veya daha fazla bitişik eğik çizgi dizisi tek bir eğik çizgi olarak sayılır. Bu, dosyalarınızı düzeltme ekini gönderen kişiden farklı bir dizinde tutmanız durumunda, düzeltme eki dosyasında bulunan dosya adlarının nasıl ele alınacağını denetler. Örneğin, yama dosyasındaki dosya adını varsayalım:

 /u/howard/src/blurfl/blurfl.c

ayarı -p0tüm dosya adını değiştirmeden verir , -p1verir

 u/howard/src/blurfl/blurfl.c

eğik çizgi olmadan , -p4verir

 blurfl/blurfl.c

4

Fark, sonraki -psayının kaldırılacak yol bileşenlerinin sayısını belirtmesidir.

Diyelim ki bir yolumuz var /Barack/Obama. Üzerinde -p0argüman bulunan bir yamanın yürütülmesi yolu şu şekilde ele alır :

/Barack/Obama

Ancak yamayı yaparken yolu kesebiliriz:

-p1kök eğik çizgisini kaldıracaktır ( eğik çizgi kalmadan şimdi Barack olacağını unutmayın):

Barack/Obama

-p2 Barack'ı (ve bitişik sağ eğik çizgiyi) kaldıracak:

 Obama

Bu patchdavranışın "nedenini" genişletmek için bu konuyu okuyun .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.