Yanıtlar:
Bir yama oluşturmanın en yaygın yolu, diff
komutu veya bazı sürüm denetiminin yerleşik diff
benzeri 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 diff
bakış 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 patch
eki ( old_version
veya new_version
) dosya adından çıkarmayı söylemeniz gerekir . Bu şu anlama -p1
gelir: 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 -p
seçeneğe gerek yoktur : patch
dosya 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 -p0
da ya ihtiyacınız vardır -p1
.
diff old/foo new/foo >my.patch
ya diff ../old/foo foo >my.patch
da diff foo.old foo >my.patch
kullanıcının patch <my.patch
yamanın nasıl üretildiğine dikkat etmeden uygulayabileceğinden ve daha sonra -p
bir kolaylık olarak eklendiğinden şüpheleniyorum . Ama aslında bilmiyorum, patch
eski bir yardımcı programdır ve kullanmaya başladığımda -p0
ya -p1
da onu kullanmanın en yaygın yollarıydı.
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ı
-p0
tüm dosya adını değiştirmeden verir ,-p1
veriru/howard/src/blurfl/blurfl.c
eğik çizgi olmadan ,
-p4
verirblurfl/blurfl.c
Fark, sonraki -p
sayının kaldırılacak yol bileşenlerinin sayısını belirtmesidir.
Diyelim ki bir yolumuz var /Barack/Obama
. Üzerinde -p0
argüman bulunan bir yamanın yürütülmesi yolu şu şekilde ele alır :
/Barack/Obama
Ancak yamayı yaparken yolu kesebiliriz:
-p1
kö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 patch
davranışın "nedenini" genişletmek için bu konuyu okuyun .