Yanıtlar:
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.
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ı.
Adamdan:
-pnumveya--strip=numDü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.cayarı
-p0tüm dosya adını değiştirmeden verir ,-p1veriru/howard/src/blurfl/blurfl.ceğik çizgi olmadan ,
-p4verirblurfl/blurfl.c
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 .