2010-08-13 17 views
5

birleştirilmiş fark yama uygulanamıyor komutu:Örneğin Solaris

diff -u file1 file2 > files.patch 

sonucu:

--- file1  Fri Aug 13 17:53:28 2010 
+++ file2  Fri Aug 13 17:53:38 2010 
@@ -1,1 +1,1 @@ 
-This is file 1 
+This is file 2 

Sonra yama komutuyla Solaris bu yamayı uygulamak denerseniz:

patch -u -i files.patch 

o üzerinde asılı:

Looks like a unified context diff. 
File to patch: 

1. Solaris kullanmak için bir yolu var mı birleşik diffs ile yerel yama komutu? 2. Birleştirilmiş formatı uygulamak mümkün değilse, hangi taşınabilir format çoğu taşınabilir olarak kabul edilir?

Güncelleme: Soruma ilk bölümünde cevabını buldum . Ikinci dosya (bu durumda dosya2) ilk olanı (dosya1) ile aynı klasörde varsa, Solaris üzerinde patch göründüğü görünüyor. Örneğin, aşağıdaki oldukça yaygın fark:

--- a/src/file.src  Sat Aug 14 23:07:29 2010 
+++ b/src/file.src  Sat Aug 14 23:07:37 2010 
@@ -1,2 +1,1 @@ 
-1 
- 
+2 

oldukça yaygın yama komutuyla çalışmayacak :

patch -p1 -u -d a < file.patch 

aşağıdaki diff (not İkinci dosya yeniden adlandırıldı) ise:

--- a/src/file.src  Sat Aug 14 23:07:29 2010 
+++ b/src/file_new.src  Sat Aug 14 23:07:37 2010 
@@ -1,2 +1,1 @@ 
-1 
- 
+2 

kusursuz çalışacaktır.

Sorumun ikinci kısmı için aşağıda kabul edilen cevaba bakınız.

cevap

0

Tek bir Unix v2 ve v3 her ikisi de bağlam farklarını destekler, ancak birleştirilmiş olmayanlar değildir, bu nedenle daha iyi taşınabilirlik için bağlam farkları kullanmalısınız (-c seçeneği ve patch). Eski Solaris bültenleri On

(ön-10, sanırım), aksi takdirde yerine standart olanlardan bazıları araçlardan uyumluluk sürümlerini alabilirsiniz, /usr/xpg4/bin senin $PATH yılında /usr/bin önce olduğundan emin olmak gerekir.

+1

Teşekkürler, açıklamalar için Gilles. Bağlam farkları kullanmayı düşüneceğim. Anladığım kadarıyla, değiştirilecek kaynak dosyayla ilgili bağlamsal yama bilgisini yazamazsınız. Ben haklı mıyım Çok uygun değil ... Her neyse, neden diff-u tarafından üretilen diff ile patch -u çalıştırmayı başaramadığımı anlayamıyorum. – Shcheklein

+0

@Shcheklein: "Değiştirilecek kaynak dosyayla ilgili yama bilgileri" ile ne demek istiyorsunuz? İçerik farkları dosya isimlerini içerir. POSIX, 'diff -cr' desteklenmesini gerektirir, bu nedenle çalışması gerekir. Bu arada, '-p0' bir fark yaratıyor mu? – Gilles

+0

Evet, içerik farkları yeterli bilgiyi içerir. Ancak, Solaris'in 'patch' ile ilgili problem farklıydı (sorunun güncellemesine bakın). '-p0' hiçbir fark yaratmaz. Her iki isim de aynı veya her iki dosya da mevcut olduğunda Solaris'te 'patch' özelliği yoktur. – Shcheklein

6

Solaris üzerinde /usr/bin/patch eski bazı standartlara uymak için gerekli eski bir sürümüdür. GNU yamasının modern bir sürümü, Solaris 8 ve sonrasında /usr/bin/gpatch olarak sağlanmıştır.

+0

biliyorum (gpatch kullanarak) benim için mükemmel çalışır. Gpatch'in varsayılan olarak yüklenmemesi olasıdır ve ürününüzün derlenmesi başarısız olduğunda çok iyi değildir, çünkü gpatch yoktur. – Shcheklein

2
diff -cr old.new new.txt > patch.txt 

gpatch -p0 < patch.txt