* .Orig ve * .rej dosyaları oluşturmadan “patch” çalıştırma


20

Söylemek mümkün mü patchüretmek için değil .origve .rejdosyalar? Bu yamanın bunları yaratması son derece can sıkıcı buluyorum.

Yanıtlar:


14

Eğer herhangi bir seçeneği sunan değilseniz patchdışında -pNbir 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 *.rejyama segmentlerini uygulamaya devam eder. Fikir, *.rejparçayı ve parçaları yamalanmış dosyaya kopyalayarak dosyayı açıp yama işlemini manuel olarak tamamlayabilmenizdir. *.origYama 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 *.rejve *.origdosyaları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-patchuzun 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 cleanTabEnter, bu komut dosyasını PATHgeliş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 .


7

Düzeltme ekinin yedek üretmemesini söylemek için -bve --backup-...seçeneklerini kaldırın .

.rejDosya oluşturmama talimatını -r -vermek için komuta seçenek ekleyin .


4
Bu benim için işe yaramıyor - sadece reddetmek "-" adlı bir dosyaya koyar, bu da çok rahatsız edici bir dosya adıdır. Mac'te 2.5.8 sürümünü kullanıyorum.
rjmunro

GNU patch 2.6mac üzerinde çalışıyor ok belki deneyin-r /dev/null
Stuart Cardall

3

Bu --no-backup-if-mismatchseç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.


1

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.


0

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 -.


-3

yama -p1 -B / dev / null -r - <dosya.patch


-1: Bu çok kötü bir tavsiye. İlk olarak, -Bbayrak 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, /devbunun yerine ağacınızda önemsiz olur . İkincisi, dosyayı -r -bastırmaz *.rej. Bu sadece sahte -Bbayrak 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-
Warren Young

1
@WarrenYoung şuna göre man patch: "-r Reddedilenleri varsayılan .rej dosyası yerine rejectfile dosyasına koy. Rejectfile - olduğunda reddetmeyi reddet."
Limbo Peng
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.