Provided by: manpages-tr_2.0.6-2_all 

İSİM
patch - yama dosyasını uygular
KULLANIM
patch [seçenekler] [özgün [yama]]
Genellikle şöyle kullanılır:
patch -psayı < yama
AÇIKLAMA
patch, diff(1) ile üretilmiş bir fark listesi içeren bir yama dosyası alır ve bu yama dosyasındaki
farkları bir veya daha fazla özgün dosyaya uygulayarak özgün dosyaların yamalı sürümlerini üretir.
Normalde yamalı sürümler özgün dosyalara yazılarak oluşturulur. Yedekler oluşturulabilir; -b ve --backup
seçeneklerine bakınız. Yamanacak dosyaların isimleri normalde yama dosyasından alınır, ancak eğer sadece
bir yamanacak dosya varsa ismi komut satırında özgün olarak belirtilebilir.
patch çalıştırıldığında fark listesinin türü -c (--context), -e (--ed), -n (--normal) veya -u (--unified)
seçenekleri ile belirtilmemişse önce fark listesinin türünü saptamaya çalışır. ed fark dosyaları bir boru
ile ed(1) metin düzenleyicisine uygulanırken, bağlamsal fark dosyaları (eski, yeni ve birleşik) ve normal
fark dosyaları doğrudan patch tarafından uygulanır.
patch yama dosyasındaki olası bozuk alanları atlayarak yamayı uygulamaya çalışır. Bu özelliğinden
yararlanarak yama dosyası içine bir açıklama yerleştirebilirsiniz ve buna rağmen yama uygulanır. Eğer
diff dosyasının içeriği sürekli aynı biçimde girintilenmişse veya bir bağlamsal fark dpsyasında satırlar
CRLF ile bitiyorsa ya da Internet RFC 934’de "-" için belirtildiği gibi "-" ile başlayan satırlar varsa
bunlar hesaba katılır.
Bağlamsal fark dosyaları ile ve bir daha az genişletme yapan normal fark dosyaları ile patch, yama
içindeki satır numaraları yanlış olduğunda bunu saptayabilir ve yama listesinin her elemanının
uygulanacağı doğru yeri bulmaya çalışır. Önce listedeki her eleman ile ilgili satır numaralarını alır ve
yamanın uygulanmasında kullanılan artı ve eksi ile belirlenmiş satırlara bakar. Eğer satır numaraları
doğru yeri belirtmiyorsa, eksi ile belirtilmiş satırları bulmak üzere metni ileri ve geri her iki yönde
tarar. patch ilk taramada değiştirilecek satırların tamamı için bir eşleşme arar. Böyle bir eşleşme
bulamazsa, yama dosyası bir bağlamsal yama dosyası ise ve belirsizlik faktörü de 1 ise değiştirilecek
satırların ilkini ve sonuncusunu yok sayarak bir arama daha yapar. Bulamazsa ve belirsizlik faktörü 2
veya 2 den büyükse bu kez ilk ve son iki satırı yok sayarak bir arama daha yapar. (Öntanımlı belirsizlik
faktörü 2’dir.)
Sonek bağlamından daha az önek içeriğine sahip olan yama parçaları (belirsizlik uygulandıktan sonra), ilk
satır numarası 1 ise dosyanın başlangıcına uygulanmalıdır. Önek bağlamından daha az sonek içeriğine sahip
olan yama parçaları ise (belirsizlik uygulandıktan sonra) dosyanın sonuna uygulanmalıdır.
patch yamanın uygulanacağı yeri bulamazsa, uygulayamadığı bölümü bir red dosyasına yazar. Bu dosyanın
ismi normalde yama dosyasının ismine .rej eklenerek elde edilir. Eğer .rej eki çok uzun bir dosya ismi
oluşturacaksa dosya isminin sonuna # eklenir, bu karakter de fazla geliyorsa dosya isminin son karakteri
# ile değiştirilir. (Rededdilen kısım yamanın biçiminden bağımsız olarak sıradan bağlamsal fark biçiminde
çıktılanır. Eğer girdi bir normal fark dosyası ise bağlamın çoğu basitçe boş olur.)
Reddedilen parça, birleşik veya bağlam farkı biçeminde çıkar. Girdi normal bir farksa, bağlamların çoğu
basitçe boştur. Red dosyasındaki reddedilen kısımlarla ilgili satır numaraları yama dosyasındaki satır
numaralarından farklı olabilir: yeni satır numaraları yamanın eski dosyada değil de yeni (yamanmış)
dosyada bulunabileceği yaklaşık yeri belirtecek şekilde oluşturulur.
Her yama parçası tamamlandığında, eğer parçanın uygulanması başarısız olmuşsa (yeni dosyadaki) hangi
satırdan itibaren devam edeceğini size bildirilir. Eğer yama parçası fark dosyasında belirtilen satırdan
farklı numaralı bir satıra uygulanmışsa size yeni konumu bildirir. Yeni konumun çok farklı olması
parçanın yanlış yeri yamamakta kullanıldığını belirtebilir. Bir eşleşme bulunurken belirsizlik faktörü
kullanmak gerekmişse, biraz kuşku duyasınız diye bu da ayrıca bildirilir. --verbose seçeneğini
belirtmişseniz başarıyla uygulanan yama parçaları hakkında da bilgi verilir.
Komut satırında özgün dosya belirtilmemişse patch, yama dosyasındaki yama olarak uygulanabilecek
alanların dışındaki alanları değerlendirerek aşağıdaki kurallara bağlı olarak yamanın uygulanacağı
dosyanın ismini tespit etmeye çalışır.
Önce, aday dosya isimlerinin listesini elde etmeye çalışır. Bunu şöyle yapar:
• Başlık bir bağlamsal fark dosyası başlığı ise, patch eski ve yeni dosya isimlerini başlıktan alır.
Eğer isimdeki bölü çizgilerinin sayısı -psayı veya --strip=sayı seçenekleri ile belirtilen kadar
değilse bu isim yoksayılır. /dev/null ismi de ayrıca yoksayılır.
• Yama olarak uygulanacak alanların dışında Index: ile başlayan satırlar varsa ve hem yeni hem de eski
dosya isimleri belirtilmemişse veya patch POSIX uyumlu ise, patch dosya isimlerini Index: ile
başlayan satırlardan alır.
• Bundan sonraki kurallara uygun olmak üzere, aday dosya isimlerinin, başlıkta göründükleri sıraya
bakılmaksızın, (eski, yeni, index) düzeninde olacakları varsayılır.
patch bir dosya ismini aday dosya listesinden şu kurallara göre seçer:
• Bazı isimli dosyalar mevcutsa, patch POSIX uyumluysa ilk dosya ismi değilse en iyi isim seçilir.
• Eğer patch RCS, ClearCase, Perforce ve SCCS’yi yoksaymıyorsa (-g sayı veya --get=sayı seçeneklerine
bakınız) ve belirtilen dosya mevcut değilse ama bir RCS, ClearCase, Perforce veya SCCS ana dosyası
varsa patch belirtilen ilk dosyayı RCS, ClearCase, Perforce veya SCCS ana dosyası ile seçer.
• Belirtilen dosya mevcut değilse, bir RCS, ClearCase, Perforce veya SCCS ana dosyası da yoksa ama
bazı dosya isimleri verilmişse, patch POSIX uyumlu değilse ve yamanın bir dosya oluşturması
gerekiyorsa, patch en az dizin oluşturulacak şekilde en iyi dosya ismini seçer.
• Şimdiye dek bahsedilen kurallarla bir dosya ismi seçilememişse, yamanacak dosyanın ismi size sorulur
ve patch dosya ismini buna göre seçer.
Belirtilen dosyalar listesinden "en iyi" dosya ismi şöyle seçilir: önce en az sayıda dizini dosya yolu
olarak alır, bundan sonra, uzantısız en kısa dosya isimleri, bunlardan sonra en kısa isimlerin tümü ve
son olarak da kalan ilk isim alınır.
Ek olarak, Yama olarak uygulanacak alanların dışında Prereq: ile başlayan bir satır varsa, patch bu
öngereklilikler satırındaki ilk sözcüğü (normalde bir sürüm numarasıdır) alır ve özgün dosyaya bu sözcük
var mı diye bakar. Yoksa patch işine devam etmeden önce bir doğrulama isteği yapar.
Tüm bunların nihayetinde, şöyle bir bildirim de yapabilirsiniz:
| patch -d /usr/src/local/blurfl
ve, blurfl dizinindeki dosya yama dosyasıyla yamanır.
Eğer yama dosyası bir yamadan fazlasını içeriyorsa patch onların her birini farklı birer yama dosyasından
geliyormuşçasına uygular. Yama olarak uygulanabilecek her satır grubundan önce gelen satırlarda bulunan
dosya isimleri ve sürüm numaralarından yukarıda bahsedildiği gibi yamanacak dosyanın ismi saptanarak bu
işlem gerçekleştirilir.
SEÇENEKLER
Uzun seçenekler için zorunlu olan girdiler kısa seçenekler için de zorunludur.
-b, --backup
Dosyaların yedeğini oluşturur. Bir dosya yamanırken özgün dosya silinmez, ya başka bir yere
kopyalanır ya da ismi değiştirilir. Mevcut olmayan bir dosyanın yedeği yapılırken, olmayan dosyayı
belirtmek için sadece ismi olan cismi olmayan (boş) bir dosya oluşturulur. Yedek dosya isimlerinin
nasıl oluşturulduğu -V veya --version-control seçeneklerinin açıklamalarında bulunabilir.
--backup-if-mismatch
Yama bir dosya ile tam uyuşmazsa ve yedekleme istenmese de dosya yedeklenir. patch POSIX uyumlu
değilse bu seçenek öntanımlı olarak uygulanır.
--no-backup-if-mismatch
Yama bir dosya ile tam uyuşmazsa ve yedekleme istense de dosya yedeklenmez. patch POSIX uyumlu
değilse bu seçenek öntanımlı olarak uygulanır.
-B, --prefix=önek
Basit yedek dosya ismi oluşturulurken dosya isminin önüne önek getirilir. Örneğin, -B /junk/ ile
dosya ismi src/patch/util.c olan bir dosyanın basit yedeği yapılırken dosya ismi
/junk/src/patch/util.c yapılır.
--binary
Standart çıktı veya /dev/tty dışında tüm dosyalar için okuma ve yazma işlemleri ikil kipte yapılır.
Bu seçenek POSIX uyumlu sistemlerde etkisizdir. DOS benzeri sistemlerde ise bu seçeneğin bir fark
oluşturması için yama diff -a --binary ile üretilmiş olmalıdır.
-c, --context
Yama dosyası sıradan bir bağlamsal fark dosyası olarak yorumlanır.
-d, --directory=dizin
Hiçbir şey yapmadan, hemen dizine geçilir.
-D , --ifdef=tanım
Değişiklikleri işaretlemede #ifdef ... #endif yapısı tanım farklılaştırma simgesi ile kullanılır.
--dry-run
Hiçbir dosyada değişiklik yapmaksızın uygulanan yamaların sonuçları basılır.
-e, --ed
Yama dosyası bir ed betiği olarak yorumlanır.
-E, --remove-empty-files
Yama uygulandıktan sonra boşalan dosyalar silinir. Aslında, bu seçenek gereksizdir, çünkü patch
yamadıktan sonra dosyanın varolup olmayacağını saptamak için başlıktaki tarih damgasını inceler. Buna
rağmen, girdi bir bağlamsal fark dosyası değilse ya da patch POSIX uyumlu ise, patch bu seçenek
verilmedikçe yamandıktan sonra boşalan dosyaları silmez. patch böyle bir dosyayı sildikten sonra
boşalmışsa dosyanın bulunduğu dizini de silmeye çalışır.
-f, --force
Kullanıcının ne yaptığını tam olarak bildiği varsayılır ve kullanıcıya herhangi bir soru yöneltilmez.
Hangi dosyaların yamanacağını belirtmeyen başlıklar içeren yamalar atlanır; Prereq: ile başlayan
satırlarda yanlış sürüm bilgisi olsa bile dosya yamanır; eski ve yeni dosyaların yer değiştirilmesi
gerekse bile yamaların bu işlem yapılmadan uygulanacağı varsayılır. Bu seçenek açıklamaları
engellemez, bunun için -s seçeneğine bakınız.
-F , --fuzz=sayı
En büyük belirsizlik faktörünü belirtmekte kullanılır. Bu seçenek sadece bağlamsal fark dosyalarına
uygulanır ve patch yamanacak yeri bulurken yama olarak kullanılacak satırların baştan ve sondan bu
kadarını yoksayar. Çok büyük belirsizlik faktörlerinin yamanın başarısızlığını arttıracağını
unutmayın. Öntanımlı belirsizlik faktörü 2’dir ve bağlamsal fark dosyalarında bağlamsal satır
sayısından daha yüksek bir değer (genelde 3’tür) atanmamalıdır.
-g , --get=sayı
Bir dosya RCS veya SCCS denetimindeyken, böyle bir dosya yoksa veya salt-okunursa ya da öntanımlı
sürümüyle eşleşiyorsa; veya ClearCase denetimindeyken, böyle bir dosya yoksa, bu seçenek, patch’in
eylemlerini denetlemekte kullanılır. sayı pozitifse, patch dosyayı sürüm denetim sisteminden alır;
sıfırsa, RCS, SCCS veya ClearCase yoksayılır ve dosya alınmaz; negatifse dosyanın alınıp alınmayacağı
kullanıcıya sorulur. Bu seçeneğin öntanımlı değeri eğer atanmışsa, PATCH_GET ortam değişkeninden
alınır; atanmamışsa öntanımlı değer sıfırdır.
--help
Seçeneklerin bir özetini basar ve çıkar.
-i, --input=yamadosyası
Yama yamadosyası dosyasından okunur. yamadosyası olarak - verilmişse öntanımlı olarak standart girdi
okunur.
-l, --ignore-whitespace
Yamanacak dosyaların içindeki sekmeler ve boşluklar için yama içindeki boşluklarla birebir eşleşme
aranmaz, ancak herhangi bir uzunlukta boşluğun her iki dosyada da karşılıklı varlığı şarttır, satır
sonlarındaki boşluklar eşleşme açısından yoksayılır. Normal karakterler tam olarak eşleştirilir.
Bağlamsal her satır yamanacak dosyadaki satırlarla daima eşleştirilir.
--merge, -merge=merge, -merge=diff3
< Yama dosyasını özgün dosyaya diff3(1) veya merge(1) gibi uygular. Bir çelişki bulunursa patch bir
uyarı çıktılar ve çelişkiyi <<<<<<< ve >>>>>>> satırları arasına yerleştirir. Bir çelişki genelde
şuna benzer:
<<<<<<<
özgün dosyadaki satırlar
|||||||
yamadaki özgün satırlar
=======
yamadaki yeni satırlar
>>>>>>>
--merge seçeneğinin seçimlik girdisi çelişkinin çıktılanma biçemini değiştirir: diff3 biçeminde
||||||| bölümünden sonra yamadaki özgün satırlar gösterilir; merge biçeminde, bu bölüm olmaz. merge
biçemi öntanımlıdır.
Bu seçenek --forward seçeneğini de uygularken --fuzz=sayı seçeneğini yok sayar.
-n, --normal
Yama dosyası, normal yama dosyası olarak yorumlanır.
-N, --forward
Eski ve yeni dosyaların yer değiştirileceği görünen veya zaten uygulanmış yamalar yoksayılır. -R
seçeneğine de bakınız.
-o, --output=çıktıdosyası
Dosyaların yerinde yamanması yerine çıktı, çıktıdosyası dosyasına gönderilir.
-p, --strip=sayı
Yama dosyasında bulunan her dosya isminin başından sayı ile belirtilen sayıda bölü çizgisi içeren
dizge yoksayılır. Birden fazla yanyana bölü çizgisi varsa bunlar tek bir bölü çizgisi sayılır. Yama
dosyasının yamanacak dosyalardan farklı bir dizinde tutulması durumunda yamanacak dosyaların nasıl
bulunacağını belirtmek amacıyla kullanılır. Örneğin, yama dosyasında yamanacak dosya isminin şöyle
verildiğini varsayalım:
/u/howard/src/blurfl/blurfl.c
Seçenek -p0 olarak verilirse bu dizge olduğu gibi ele alınır, -p1 verilirse,
u/howard/src/blurfl/blurfl.c
baştaki bölü çizgisi atılır, -p4 verilirse,
blurfl/blurfl.c
olur. -p hiç belirtilmezse sonuç blurfl.c olacaktır. Bu durumda dosya yamanın bulunduğu dizinde
aranacağından dosya daha farklı bir yerdeyse bu da -d seçeneği ile belirtilebilir.
--posix
POSIX standardına kesinlikle uyulur:
• Fark dosyası başlıklarından dosya isimleri öğrenilirken, listedeki (eski, yeni, birleşik) ilk
mevcut dosya alınır.
• Yamandıktan sonra boşalan dosyalar silinmez.
• RCS, ClearCase veya SCCS’deki dosyalar için alınacak mı diye sormaz.
• Komut satırında seçeneklerin dosyalardan önce verilmesi gerekir.
• Eşleşmeyen dosyaların yedeklemesi yapılmaz.
--quoting-style=sözcük
Çıktılanan isimler sarmalanırken sözcük ile belirtilen tarz kullanılır. sözcük şunlardan biri
olabilir:
literal
İsimler olduğu gibi çıktılanır.
shell
İsimler kabuk metakarakterleri içeriyorsa kabuk için sarmalanır yoksa anlamı belirsiz çıktılama
yapılır.
shell-always
Normalde sarmalanmaları gerekmese bile isimler daima kabuk için sarmalanır.
c İsimler C dilinde dizgelere uygulandığı gibi sarmalanır.
escape
İsimler çevreleyen çifttırnakların ihmal edilmesi dışında c tarzındaki gibi sarmalanır.
--quoting-style seçeneği için öntanımlı değeri QUOTING_STYLE ortam değişkeninde belirtebilirsiniz. Bu
ortam değikeni atanmamışsa öntanımlı değer shell’dir.
-r, --reject-file=reddosyası
Reddedilenler öntanımlı .rej dosyası yerine reddosyasına konulur. reddosyası olarak - belirtilmişse
reddedilenler yok sayılır.
-R, --reverse
Bu yamanın eski ve yeni dosyalar yer değiştirilerek uygulanacağı varsayılır. Yama olarak kullanılacak
her bölümdeki eski ve yeni satırlar yer değiştirilerek uygulanmaya çalışılır. Yer değiştirildiğinde
anlamsız olan kısımlar reddedilir. -R seçeneği ed fark betikleri ile çalışmaz, çünkü yer değiştirme
işlemini gerçekleştirmek için çok az bilgi içerirler.
Yama içindeki kısımlardan ilkinin uygulanması başarısız olursa, patch bu kısmın eski ve yeni
satırlarını yer değiştirerek böyle uygulanabiliyor mu diye bakar. Böyle uygulanabiliyorsa kullanıcıya
-R seçeneğinin uygulanmasını isteyip istemediğini sorar. Uygulanamıyorsa, patch normal olarak
uygulamaya devam eder. (Bilgi: Eğer yama bir normal yama ise ve boş bir içerik bile daima
eşleşeceğinden ilk komut yamanın bir ek uygulanacağını belirtiyorsa bu yöntem yer değiştirmeli yamayı
saptayamaz. Tesadüfen, çoğu yama bir satırın tamamen silinmesini değil ya bir ek ya da bir değişiklik
yapılmasını gerektirir, bu durumda yer değiştirmeli normal fark dosyalarından silme işlemi ile
başlayanlar başarıyı arttıran kuralların uygulanmasına bağlı olarak başarısız olur.)
--read-only=davranış
Salt-okunur bir dosyada değişiklik yapılırken belirtilen davranışa uyulur: ignore ise olası sorunlar
yok sayılır, warn ise bu konuda uyarır, fail ise işlem başarısız olur.
reject-format=biçem
Reddedilenler dosyaları belirtilen biçemde üretir (context veya unified). Bu seçenek olmaksızın yama
unified (birleşik) ise reddedilen parçalar da unified diff biçeminde olur. Aksi takdirde, context
(bağlamsal) diff biçeminde olur.
-s, --silent, --quiet
Bir hata oluşmadıkça bilgilendirici hiçbir şey çıktılanmaz.
--follow-symlinks
Girdi dosyalarını aranırken sembolik bağlar izlenir. Sembolik bağların işaret ettiği dosyaları
değiştirmek yerine sembolik bağları değiştirir. Sembolik bağlara Git tarzı yamalar artık
uygulanmamaktadır. Bu seçenek, yamanın önceki sürümleriyle geriye dönük uyumluluk için mevcuttur;
kullanımı önerilmez.
-t, --batch
-f seçeneğinde olduğu gibi sorular engellenir ama bu biraz farklı kabulllerle yapılır: başlıklarında
dosya isimlerini içermeyen yamalar atlanır (-f ile aynı); yamanın Prereq: satırında yanlış sürüm
belirtilen dosyalar için yamalar atlanır; ve yer değiştirme uygulanması gerekliliği saptanan
yamaların yer değiştirme ile uygulanacağı varsayılır.
-T, --set-time
Yamanmış dosyaların erişim ve değiştirme zamanları, bağlamsal fark dosyalarının başlıklarındaki zaman
bilgisinin yerel zamanı gösterdiği varsayımıyla bu zamana ayarlanır.
Bu seçeneğin kullanılması önerilmez, çünkü yerel zaman kullanılarak uygulanan yamaları diğer zaman
dilimlerindeki kulanıcılar kolayca kullanamazlar, ayrıca yaz saati uygulamasından dolayı yerel zaman
damgaları yamanın geçmişte uygulanması gibi tuhaflıklara sebep olabilir. Bu seçenek yerine -Z veya
--set-utc seçeneklerini kullanarak zamanı UTC’ye göre belirtmeyi tercih edin.
-u, --unified
Yama dosyası birleşik bağlamsal fark dosyası olarak yorumlanır.
-v, --version
patch’in sürümünü ve yama seviyesini basar ve çıkar.
-V, --version-control=yöntem
Yedek dosya isimleri saptanırken yöntem kullanılır. Bu yöntem ayrıca bu seçenek ile gerektiğinde
değiştirilmek üzere PATCH_VERSION_CONTROL (veya bu atanmamışsa VERSION_CONTROL) ortam değişkeni ile
atanabilir. Burada bir yöntemin atanması yedekleme yapılacağı anlamına gelmez, sadece yedekleme
yapılacaksa yedek dosyalarının ismi bu yöntem kullanılarak saptanır.
yöntem değeri GNU Emacs’ın ’version-control’ değişkeni gibidir; farklı olarak patch daha açıklayıcı
olan eşanlamlılarını da tanır. Geçerli yöntem değerleri şunlardır (eşsiz kısaltmalar da kabul
edilir):
existing, nil
Zaten varolan dosyaların numaralı yedekleri yapılır, aksi takdirde basit yedekleme yapılır. Bu
öntanımlıdır.
numbered, t
Numaralı yedekleme yapılır. F dosyasının yedek dosyası N sürüm numarasını belirtmek üzere F.~N~
biçiminde isimlendirilir.
simple, never
Basit yedekleme yapılır. -B (--prefix), -Y (--basename-prefix) ve -z (--suffix) seçenekleri ile
basit yedek dosyası ismi belirtilebilir. Bu seçeneklerin hiçbiri belirtilmemişse, basit yedekleme
soneki kullanılır; sonek değeri SIMPLE_BACKUP_SUFFIX ortam değişkeni ile belirtilmemişse
öntanımlı olarak .orig soneki kullanılır.
Numaralı ve basit yedeklemede dosya ismi çok uzun olursa bunlar yerine sonek olarak ~ kullanılır, bu
işlem de dosya isminin çok uzun olmasına sebep oluyorsa dosya ismindeki son karakter ~ karakteri ile
değiştirilir.
--verbose
Yapılan işlem hakkında daha ayrıntılı bilgi verilir.
-x, --debug=sayı
Sadece patch yamacılarını ilgilendiren hata ayıklama seçeneklerini belirtmek için kullanılır.
-Y, --basename-prefix=önek
Basit yedek dosyası ismi oluşturulurken dizinlerden arındırılmış dosya isminin önüne önek getirilir.
Örneğin basit yedek dosya ismi -Y .del/ ile belirtilmişse src/patch/util.c dosyasının ismi
src/patch/.del/util.c yapılır.
-z, --suffix=sonek
Basit yedek dosyası ismi oluşturulurken dosya isminin sonuna sonek getirilir. Örneğin basit yedek
dosya ismi -z - ile belirtilmişse src/patch/util.c dosyasının ismi src/patch/util.c- yapılır.
Yedekleme soneki gerektiğinde bu seçenek ile değiştirilmek üzere SIMPLE_BACKUP_SUFFIX ortam değişkeni
ile de atanabilir.
-Z, --set-utc
Yamanmış dosyaların erişim ve değiştirme zamanları, bağlamsal fark dosyalarının başlıklarındaki zaman
bilgisinin koordinatlı evrensel zamanı (UTC; GMT olarak da bilinir) gösterdiği varsayımıyla bu zamana
ayarlanır. Ayrıca -T veya --set-time seçeneklerinin açıklamasına da bakınız.
Dosyanın özgün zamanı yama başlığında belirtilen zamanla eşleşmezse ya da onun içeriği yama ile tam
olarak eşleşmezse, -Z (--set-utc) ve -T (--set-time) seçenekleri bir dosyanın zamanını ayarlamaktan
kaçınır. Buna rağmen -f (--force) seçeneği belirtilmişse dosyanın zamanı ne olursa olsun ayarlanır.
diff çıktı biçiminin sınırlamalarından dolayı, dosyaları içeriği değiştirilmeyecekse, bu seçeneklerle
bu dosyaların zamanı güncellenemez. Ayrıca, bu seçenekleri kullandığınız takdirde, zamanları
güncellenmiş dosyalara bağımlı dosyaları kaldırmalısınız (make clean gibi). Böylece sonraki make
çağrılarında yamanmış dosyaların zamanlarından dolayı hatalarla/uyarılarla karşılaşmazsınız.
ORTAM DEĞİŞKENLERİ
PATCH_GET
Eksik ya da salt-okunur dosyaların RCS, ClearCase, Perforce veya SCCS’den öntanımlı olarak alınıp
alınmayacağını belirtmek için kullanılır. -g (--get) seçeneğinin açıklamasına bakınız.
POSIXLY_CORRECT
Bu değişken atanmışsa patch öntanımlı olarak POSIX standardına uyumlu davranır. --posix seçeneğinin
açıklamasına bakınız.
QUOTING_STYLE
--quoting-style seçeneğinin öntanımlı değeridir.
SIMPLE_BACKUP_SUFFIX
Bu ortam değişkeninin değeri basit yedekleme dosyalarında .orig soneki yerine kullanılacak sonektir.
TMPDIR, TMP, TEMP
Geçici dosyaları konulacağı dizindir. patch bu listeden atanmış değerlerden ilkinin değeri kullanır.
Hiçbiri atanmamışsa sisteme bağlı öntanımlı değer kullanılır. Unix makinalar için bu değer normalde
/tmp dizinidir.
VERSION_CONTROL, PATCH_VERSION_CONTROL
Sürüm denetim tarzını belirtir. -v (--version-control) seçeneğinin açıklamasına bakınız.
İLGİLİ DOSYALAR
/dev/tty
denetim uçbirimi; kullanıcıya sorulan soruların yanıtlarını almak için kullanılır
$TMPDIR/p*
geçici dosyalar
İLGİLİ BELGELER
diff(1), ed(1).
Marshall T. Rose ve Einar A. Stefferud, Proposed Standard for Message Encapsulation, Internet RFC 934
<URL: http://ftp.isi.edu/innotes/rfc934.txt> (1985-01).
YAMA GÖNDERENLER İÇİN
Yama göndermeye hazırlanıyorsanız, hatırlamanız gereken bir sürü şey olacaktır.
Yamanızı sistemli olarak oluşturmalısınız. İyi bir yöntem
diff -Naur eski yeni komutunu kullanmaktır. Burada eski ve yeni ile eski ve yeni dizin isimleri
belirtilir. Bu isimler herhangi bir eğik çizgi çizgisi içermemelidir. diff komutunun başlıkları yama
uygulayıcıların yamayı -Z (--set-utc) seçeneği ile uygulayabilecekleri şekilde Evrensel Zamanda
geleneksel Unix tarih ve zaman biçeminde içermelidir. Bu örnekte, komut Bourne kabuğu (bash) sözdizimiyle
yazılmıştır:
LC_ALL=C TZ=UTC0 diff -Naur gcc-2.7 gcc-2.8
Yamanızı uygulayacak olanlara hangi dizine geçip hangi patch seçeneğini kullanacağını söyleyin. Seçenek
dizgesi olarak -Np1 önerilir. Yaptığınız yamayı kendinizi yamayı alacakların yerine koyarak deneyin, yani
özgün dosyaların bir kopyasına bu yamayı uygulayın.
İlk diff’e göre yama seviyesini arttırmak için yamanmış bir patchlevel.h dosyası tutmaktan dolayı çok
üzgün kişileri gönderdiğiniz yama sayesinde kazanabilirsiniz. Yama içine bir Prereq: satırı koyarsanız
onların sıradışı yamaları uygularken bazı uyarılar almamasını sağlamış olursunuz.
Bir dosyanın yama uygulanırken oluşturulmasını isterseniz, oluşturulacak dosyayı /dev/null ile ya da
zaman damgası Unix çağ başlangıcına (Epoch: 1970-01-01 00:00:00 UTC) ayarlanmış boş bir dosya ile
karşılaştırılarak yapılmış bir fark dosyası ile bunu sağlayabilirsiniz. Bu sadece, oluşturulacak dosya
hedef dizinde yoksa çalışır. Tersine, yama uygulanıren mevcut bir dosyanın silinmesini isterseniz,
silinecek dosyayı yine zaman damgası Unix çağ başlangıcına ayarlanmış boş bir dosya ile karşılaştırılarak
yapılmış bir fark dosyası ile bunu sağlayabilirsiniz. Silinmesini istediğiniz dosya, patch POSIX uyumlu
değilse ve -E (--remove-empty-files) seçeneği verilmişse, silinecektir. Dosyaları oluşturan ya da silen
yamalar üretmenin kolay bir yolu GNU diff’in -N (--new-file) seçeneğini kullanmaktır.
Alıcıların -pN seçeneğini kullanacağını varsayıyorsanız, böyle bir çıktıya sahip yamayı göndermeyin:
diff -Naur v2.0.29/prog/README prog/README
--- v2.0.29/prog/README Mon Mar 10 15:13:12 1997
+++ prog/README Mon Mar 17 14:58:22 1997
Çünkü burada eski ve yeni dosya isimleri farklı sayıda bölü çizgisi içermektedir ve patch’in farklı
sürümleri dosya isimlerini farklı yorumlarlar. Karışıklığı önlemek için böyle bir çıktı üreten yamalar
gönderin:
diff -Naur v2.0.29/prog/README v2.0.30/prog/README
--- v2.0.29/prog/README Mon Mar 10 15:13:12 1997
+++ v2.0.30/prog/README Mon Mar 17 14:58:22 1997
README.orig gibi yedek dosya ismi olarak kullanılabilecek bir dosya ismi ile karşılaştırılarak üretilmiş
yamalar göndermekten kaçının. Böyle bir yama patch’in gerçek dosyayı değil yedekleme dosyasını yamamasına
yol açabilir. Bunun yerine old/README ve new/README gibi farklı dizinlerde bulunan aynı isimli iki
dosyayı karşılaştırın.
Yer değiştirmeli yamalar göndermemeye çalışın. Böyle bir yama zaten uygulanmış bir yama gibi
görüneceğinden insanları şaşırtır.
Yamanızın türetilerek elde edilen dosyaları yamamasına dikkat edin (makefile’ınızın içinde configure:
configure.in diye bir satır var diye configure dosyasını yamamak gibi.). Alıcılar bu tür türetilerek elde
edilen dosyaları zaten kendileri türetebilmelidir. Türetilen dosyalar için fark dosyaları göndermek
zorundaysanız, fark dosyalarını UTC kullanarak üretin. Böylece alıcılar yamayı -Z (--set-utc) seçeneği
ile uygulayıp yamanmış dosyalara bağımlı yamanmamış dosyaları kaldırmak zorunda kalırlar (make clean
yapmak gibi).
Beş yüz bilmem kaç farklık bir listeyi tek bir dosyaya koymaktan kaçınmak iyi olurdu. Birbiriyle ilgileri
nedeniyle gruplanabilen dosyalarla ilgili yamaları farklı dosyalara koymak akıllıca olur.
TANI İLETİLERİ
Tanı iletilerinin varlığı genellikle patch’in yama dosyanızı çözümleyemediğini belirtir.
--verbose seçeneği verilmişse bir Hmm... iletisi, yama dosyasında işlenemeyen bir metinin varlığını ve
patch’in bu metin içinde bir yama var mı acaba, varsa bu ne tür bir yamadır acaba diye bir saptama
yapmaya çalıştığını gösterir.
patch’in çıkış durumu 0 ise, listedeki yamaların hepsi başarıyla uygulanmış demektir. 1 ise bazıları
uygulanamamıştır. 2 ise biraz daha fazla sorun vardır. Bir döngü içinde çok sayıda yama uyguluyorsanız
her seferinde bu çıkış durumuna bakmanız icabeder, böylece kısmen yamanmış dosyalara sonraki yamayı
uygulamamış olursunuz.
YETERSİZLİKLER
Bağlamsal fark dosyaları boş dosyaların ve boş dizinlerin ya da sembolik bağ gibi özel dosyaların
oluşturulması ve silinmesi için güvenilir bir içerik sunamazlar. Sahiplik, dosya izinleri gibi dosyaların
temel verilerinde bir değişiklik bilgisi sunamadıkları gibi bir dosyanın başka bir dosyaya sabit bağ mı
olacağı gibi bilgileri de içeremezler. Bu tür değişiklikler gerekliyse, bunları gerçekleştirecek bir
betik yamaya eşlik etmelidir.
patch, bir ed betiğinde olmayan satır numaraları hakkında birşey söyleyemediği gibi, bir normal fark
dosyasında da sadece bir değişiklik ya da silme işlemi bulursa hatalı satır numaralarını saptayabilir.
Belirsizlik faktörü olarak 3 verildiğinde bağlamsal fark dosyaları da sorun yaratabilir. Elverişli bir
etkileşimli arayüz eklenene kadar, bir bağlamsal fark dosyasının böyle bir durumda sorun çıkarıp
çıkarmayacağını kendiniz saptamalısınız. Şüphesiz, hatasız gerçekleşen bir derleme işlemi yamanın hatasız
uygulandığını gösteriyor gibi görünse de bu daima böyle olmaz.
patch, bazan biraz fazla tahmin yapması gerekse bile genellikle doğru sonuçlar üretir. Yine de, yamanın
üretildiği dosya ile yamanın uygulandığı dosya aynı sürüme ait olduğu zaman sonuçların doğru olacağı
garanti edilmiştir.
UYUMLULUK BİLGİLERİ
POSIX standardı, patch’in geleneksel davranışından farklı davranışlar belirtir. patch’in POSIX uyumluluğu
olmayan 2.1 ve daha önceki sürümleri ile çalışmak zorundaysanız bu farklardan haberdar olmanız gerekir.
• Geleneksel patch’de -p seçeneğinin terimi isteğe bağlıdır. Yalnız başına -p seçeneği -p0’a
eşdeğerdir. Şimdiki durumda ise -p seçeneğinin bir terime sahip olması zorunludur ve -p 0 seçeneği
-p0 seçeneğine eşdeğerdir. En yüksek derecede uyumluluk adına seçeneği -p0 ve -p1 gibi kullanın.
Ayrıca, geleneksel patch dosya yolunu saptarken bölü çizgilerinin sayısına bakarken yeni sürümleri
dosya yolunu oluşturan elemanların sayısına bakmaktadır. Bundan dolayı, birden fazla yanyana bölü
çizgisi tek bir bölü çizgisi olarak ele alınmaktadır. En yüksek derecede uyumluluk adına gönderilen
yamaların içindeki dosya isimlerinde // olmamasına dikkat edin.
• Geleneksel patch’de yedekleme öntanımlı olarak etkindir. Bu davranış şimdi sadece -b (--backup)
seçeneği ile etkin kılınabilmektedir.
Bunun tersine, POSIX patch’de bir eşleşmeme olsa bile yedekleme asla yapılmaz. GNU patch’de bu
davranış --posix seçeneği kullanılarak yahut POSIXLY_CORRECT ortam değişkeninin varlığı sayesinde
POSIX uyumluluğu sağlanarak aksi takdirde --no-backup-if-mismatch seçeneği ile etkinleştirilir.
Geleneksel patch’in -b sonek seçeneği ile GNU patch’in -b -z sonek seçenekleri eşdeğerdir.
• Geleneksel patch yama başlığından yamanacak dosyanın ismini öğrenmek için karmaşık (ve iyi
belgelenmemiş) bir yöntem kullanır. Bu yöntem POSIX ile uyumlu olmadığı gibi, birkaç yanlış gibi
görünmeyen yanlış içerir. Şimdi patch aynı karmaşıklıkta (ama daha iyi belgelenmiş) ve isteğe bağlı
olarak POSIX uyumlu olabilen bir yöntem kullanmaktadır; onun artık daha az yanlış gibi görünmeyen
yanlış içerdiğini düşünüyoruz. Bağlamsal fark dosyasının başlığında ve Index: satırında dosya
isimlerinden önek ayırması yapıldıktan sonra kalan dosya isimleri aynı ise bu iki yöntem birbiriyle
uyumludur. Yamanız, her başlıktaki dosya isimleri eşit sayıda bölü çizgisi içeriyorsa, normal olarak
uyumludur.
• Geleneksel patch kullanıcıya bir soru yönelteceği zaman soruyu standart hataya gönderir ve yanıtı bir
uçbirim olarak sırayla şu dosyalarda arar: standart hata, standart çıktı, /dev/tty ve standard girdi.
Şimdi ise patch soruyu standart çıtıya gönderip yanıtı /dev/tty’den okur. Bazı soruların öntanımlı
yanıtları değiştirilmiştir, böyle öntanımlı yanıtları olan sorularda patch artık sonsuz bir döngüye
girip yanıt beklememektedir.
• Geleneksel patch gerçek bir hata durumunda 1 ile dönerken, uygulanamayan yamalar olduğunda bunların
sayısını belirten bir çıkış değeri ile döner. Şimdi ise patch uygulanamayan yamalar olduğunda 1 ile,
gerçek bir sorun olması durumunda 2 çıkış değeri ile döner.
• GNU patch, geleneksel patch ve POSIX uyumlu patch için ortak olan seçeneklerle kendinizi
sınırlarsanız iyi olur. Bu seçenekler aşağıda listelenmiştir. Terimli seçeneklerde terimler
zorunludur ve terim ile seçenek arasındaki boşluğun olup olmaması önemlidir.
-c
-d dizin
-D tanım
-e
-l
-n
-N
-o çıktıdosyası
-psayı
-R
-r reddosyası
YAZILIM HATALARI
Yazılım hatalarını lütfen eposta ile <bug-patch (at) gnu.org> adresine bildiriniz.
Kod eğer yinelenmişse (örneğin, #ifdef ESKİKOD ... #else ... #endif ile) patch her iki sürümüde
yamayamayacatır ve bu her ikisi için de uygulanabiliyorsa, yanlış sürüm yamanabilecek ve size işlemin
başarılı olduğunu söylececektir.
Evvelce uygulanmış bir yamayı uygularsanız, patch yamanın yer değiştirmeli yama olarak uygulanacağını
varsayabilir ve size bu yamayı uygulamamayı teklif eder. Bu bir özellik olarak yorumlanabilirdi.
Bir yama parçasının nasıl birleştirileceğini hesaplamak, standart bulanık algoritmayı kullanmaktan çok
daha zordur. Daha büyük parçalar, daha fazla bağlam, özgün konumdan daha büyük bir sapma ve daha kötü bir
eşleşme, algoritmayı yavaşlatır.
TELİF HAKKI VE LİSANS
Telif Hakkı © 1984, 1985, 1986, 1988 Larry Wall.
Telif hakkı © 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2009
Free Software Foundation, Inc. Lisans GPLv3+: GNU GPL sürüm 3 veya üstü
<http://gnu.org/licenses/gpl.html>. Bu bir özgür yazılımdır: yazılımı değiştirmek ve dağıtmakta
özgürsünüz. Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
YAZARLAR
patch’in özgün sürümü Larry Wall tarafından yazılmıştır. Paul Eggert patch’in keyfî sınırlarını kaldırdı;
ikilik dosyaların desteklenmesi, dosya zamanlarının ayarlanması, dosyaları silinmesi özelliklerini
ekledi; ve daha iyi POSIX uyumluluğu sağladı. Diğer destekleyicilerden Wayne Davison unidiff desteğini,
David MacKenzie yapılandırma ve yedekleme desteklerini sağladı. Andreas Grünbacher birleştirme desteğini
sağladı.
ÇEVİREN
© 2022 Nilgün Belma Bugüner
Bu çeviri özgür yazılımdır: Yasaların izin verdiği ölçüde HİÇBİR GARANTİ YOKTUR.
Lütfen, çeviri ile ilgili bildirimde bulunmak veya çeviri yapmak için https://github.com/TLBP/manpages-
tr/issues adresinde "New Issue" düğmesine tıklayıp yeni bir konu açınız ve isteğinizi belirtiniz.
patch 2.7.6 Şubat 2018 PATCH(1)