Söylemek mümkün mü patch
üretmek için değil .orig
ve .rej
dosyalar? Bu yamanın bunları yaratması son derece can sıkıcı buluyorum.
Söylemek mümkün mü patch
üretmek için değil .orig
ve .rej
dosyalar? Bu yamanın bunları yaratması son derece can sıkıcı buluyorum.
Yanıtlar:
Eğer herhangi bir seçeneği sunan değilseniz patch
dışında -pN
bir yama temiz uygulamak başarısız olduğunda, sadece bu dosyaları oluşturur.
Bu nedenle, seçeneklerden biri bozuk yamalar oluşturmayı (veya kabul etmeyi) durdurmaktır. :)
Gerçek dünyada, bu bir özellik. patch(1)
Özgün dosyaya bir yama segmenti uygulanamadığı zaman , geçici orijinal dosya kopyasını kalıcı olarak kaydeder *.orig
, reddedilen segmenti döker ve *.rej
yama segmentlerini uygulamaya devam eder. Fikir, *.rej
parçayı ve parçaları yamalanmış dosyaya kopyalayarak dosyayı açıp yama işlemini manuel olarak tamamlayabilmenizdir. *.orig
Yama işlemi yanlışlıkla bir şey virane zaman dosya da yararlı olabilir ve bunu düzeltmek için orijinal sürüme bakmanız gerekir.
Her zaman *.rej
ve *.orig
dosyalarından gelen metinlerle kötü bir düzeltme yapmıyorum , ancak onlara ihtiyacım olması durumunda onlara sahip olmak güzel.
Kötü bir düzeltme ekini düzelttikten sonra, işleri hızlı bir şekilde temizlemek için aşağıdaki komut dosyasını proje kökünde çalıştırıyorum:
#!/bin/bash
find . '(' \
-name \*-baseline -o \
-name \*-merge -o \
-name \*-original -o \
-name \*.orig -o \
-name \*.rej \
')' -delete
Buna cleanup-after-bad-patch
uzun isim kısmen ihtiyaç duyduğunuz dosyaları kaldırabileceğinden, yanlışlıkla yanlışlıkla çalıştırılmasını garanti ediyorum. Dürüst olmak gerekirse, normalde yazarak çalıştırıyorum clean
TabEnter, bu komut dosyasını PATH
geliştirme makinelerimde bulmak için yeterli .
Kontrol ettiği ek desenler, bir birleştirme işlemi sırasında aynı sorunla karşılaştığında, sürüm kontrol sistemimin çıktısı olan dosyalar içindir . VCS / SCM araçlarınız için ayarlamak isteyebilirsiniz .
Düzeltme ekinin yedek üretmemesini söylemek için -b
ve --backup-...
seçeneklerini kaldırın .
.rej
Dosya oluşturmama talimatını -r -
vermek için komuta seçenek ekleyin .
GNU patch 2.6
mac üzerinde çalışıyor ok belki deneyin-r /dev/null
Bu --no-backup-if-mismatch
seçenek ".orig" dosyalarından kaçınır.
Ayrıca --merge
, bir dosya içi çakışma oluşturan seçeneği denemek isteyebilirsiniz .
Her durumda, birleştirme ezici hale gelirse hızlı bir şekilde iyi bir duruma dönmenin bir yoluna sahip olmalısınız.
Ben -r -
adlandırılmış reddetme dosyaları oluşturmak neden v2.5.4 yama ile sıkışmış -
.
Bunu buldum --reject-file=
yani boş değer çıkış koduyla başarısız olmasına yama neden 2
EĞER bir dosyayı reddetmek yazmaya çalışır. Reddetme yoksa, beklendiği gibi çalışır. Eski yama sürümü için tam bir çözüm olmasa da, bazı durumlarda bu kabul edilebilir veya istenebilir.
Ben gelebilir en iyi (kuşkusuz halının altına kir süpürme yolu) kullanıyor -r <tmpfile>
, yani:
# patch -r /tmp/deleteme.rej -i patchfile filetobepatched
v2.5.8 sürümünden beri dosyayı -r -
gerçekten oluşturur -
.
yama -p1 -B / dev / null -r - <dosya.patch
-B
bayrak komutunuzdan göründüğü gibi *.orig
çıktıyı göndermez /dev/null
. Normal kullanıcılar gibi adlarda dosyalara yazamazlar /dev/nullfoo.cpp
. Bunu kök olarak yaparsanız, /dev
bunun yerine ağacınızda önemsiz olur . İkincisi, dosyayı -r -
bastırmaz *.rej
. Bu sadece sahte -B
bayrak nedeniyle hata , geçerli dizinde adlı bir dosya oluşturmak olan gerçekten olmadan ne yapacağını göstermesini durdurur çünkü görünüyor . -B
-
man patch
: "-r Reddedilenleri varsayılan .rej dosyası yerine rejectfile dosyasına koy. Rejectfile - olduğunda reddetmeyi reddet."