Windows'ta fark düzeltme ekini nasıl uygulayabilirim?


136

Orada bir fark yama oluşturabilecek birçok program var, ama bir tane uygulamak için bir zaman heck yaşıyorum. Bir yama dağıtmaya çalışıyorum ve bir kullanıcıdan nasıl uygulanacağı hakkında bir sorum var. Bu yüzden kendi başıma anlamaya çalıştım ve hiçbir ipucum olmadığını öğrendim ve bulabildiğim araçların çoğu komut satırı. (Bir komut satırıyla başa çıkabilirim, ancak pek çok insan hoş, dostça bir GUI olmadan kaybolacaktı. Yani bunlar bu amaç için iyi değil.)

TortoiseSVN kullanmayı denedim. Başvurmak istediğim yama var. Düzeltme ekini sağ tıklatıyorum ve TortoiseSVN alt menüsü altında "Düzeltme ekini uygula" yazan bir seçenek var. Tek yaptığı boş bir pencere açmak.

Bu yüzden Open'a vurmaya çalıştım. İki seçeneği vardır: birleştirme ve birleştirilmiş fark uygulama. (Yama neyse ki birleştirilmiş fark biçimindedir.) Ancak sadece düz bir şekilde uygula seçeneği çalışmıyor: Düzeltme eki ve bir klasör ister. Her nasılsa , yamayı uygulamak için dosya istemeyi unuttum ! Yani TortoiseSVN sadece düz çalışmıyor. Düzeltme eki ve dosya alıp doğru şekilde uygulayacak Windows GUI tabanlı bir yardımcı program var mı?

DÜZENLEME: Şimdiye kadar verilen yanıtlara bakıldığında, Tortoise'ın yalnızca zaten sürümlendirilmiş bir dosya olduğunda doğru yapacağını görünüyor. Burada durum böyle değil. SVN deposundan gelmeyen bir dosyaya yama uygulayabilmem gerekiyor. Sadece Tortoise kullanmayı denedim, çünkü SVN'nin diffs kullandığını ve hem bunları nasıl oluşturacağınızı hem de uygulayacağınızı bilmeliyim.


WinMerge cevabı kulağa hoş geliyordu ama sadece nasıl yama yapılacağını açıklıyor, nasıl yama uygulayacağını değil. TortoiseHG'nin yamaları uygulamak için harika bir yolu var, ancak bildiğim kadarıyla sadece hg repo'sundaki dosyalara. Harici SVN TortoiseDiff bunu yapamazsa, herhangi bir GUI aracının yapabileceğini merak ediyorum.
Warren P

3
Wow, haklısın kısa cevap hala hayır - en azından WinMerge'de. WinMerge'de özellik isteği burada sourceforge.net/tracker/…
KCD

Yanıtlar:


32

Yama uygula

TortoiseMerge ile:

  1. Mevcut bir SVN repo dizinini bulma ve açma
  2. Zaten mevcut değilse, "merges" adlı yeni bir dizin oluşturun
  3. .Patch dosyasını uygulamak istediğiniz dosyayı kopyalayın
  4. Bir sonraki adıma geçmeden önce svn deposuna EKLEME ve KOMİTE
  5. Birleştirmelere sağ tıklayın ve Düzeltme ekini uygula ... seçeneğini belirleyin .
  6. Listeden dosyayı çift tıklayın
  7. Diff ile yamalı dosya sağ bölmede görüntülenir
  8. Bu bölmeyi tıklayın ve Dosya-> Farklı Kaydet ... ile Kaydet veya dışa aktar'ı tıklayın.

TortoiseMerge'den açarsanız alternatif ekran görüntüsü. Aşağıdaki ekranda, dizin, yukarıdaki 2. adımda belirtilen "birleştirme" dizinini ifade eder: screeny

WinMerge GUI ekran görüntüsü: screeny


@WarrenP: evet TortoiseMerge kullanarak yamanın nasıl uygulanacağını açıklıyor
Walter Stabosz

4
Yorumum düzenlemelerden önce anlamlı ve artık düzenlemelerden sonra anlam ifade etmiyor. Henüz kafanız mı karıştı? OP, Ekim 2011'den bu yana cevabını tekrar düzenlediğinden yukarıdaki düzenleme zaman damgası (24 Mart '11) yanlış görünüyor. Yorumumdaki zaman damgası da yanlış.
Warren P

9
@SheriffMd "D: \ Folder çalışan bir kopya değil" hatasını almıyor musunuz?
onmyway133

1
@SheriffMd "Klasör ... çalışan bir kopya değil" iletisini de alıyorum - peki, sürüm bilgisi olmayan dosyaya bir yama uygulamak için kaplumbağa birleştirme kullanmak nasıl mümkün olabilir?
Peter T.

1
@ onmyway133, adımları tekrarladım. Adım 2 ve Adım 4'e bakın. "Çalışma kopyası değil" hata iletisini almayacaksınız.
Şerif Md

21

Sadece bunun için saf Python aracı yaptım . Tahmin edilebilir platformlar arası davranışı vardır. Yeni dosyalar oluşturmasa da (bunu yazarken) ve bir GUI'den yoksun olsa da, grafik aracı oluşturmak için kütüphane olarak kullanılabilir.

GÜNCELLEME : Python yüklüyse kullanmak daha uygun olmalıdır.

pip install patch
python -m patch

1
Bunu çok kullanıyorum. Teşekkürler @techtonik. Python3 ile çalışmasını sağlayan haber var mı?
pelson

Çalıştığından emin olmak için pip install yamasını yönetici haklarıyla çalıştırın.
Vertexwahn

@Vertexwahn Linux'ta mı?
anatoly techtonik

Python her yerde çalışıyor - Windows 10 ile test ettim
Vertexwahn

Git yama işe yaramadığında Windows 10'da çalıştı. Teşekkür ederim!
sqrl0

19

TortoiseMerge , TortoiseSVN ile birlikte gelen ayrı bir yardımcı programdır.

TortoiseDiff.zip arşivinde ayrı olarak da indirilebilir . Bu, sürümlendirilmemiş dosyalara birleştirilmiş diffs uygulamanıza izin verecektir.


21
AFAIK, bu sürüm olmayan bir dosyaya yama uygulayamaz.
Pihentagy

Sürüm bilgisi olmayan bir dosyaya uygularken sorun yaşamadım.
Paul Shannon

diğerleri biraz istiyor: S.
UmNyobe

1
1.8.7 sürümü, dest'in sürümlendirilmemesi hakkında bir hata veriyor.
Nick Westgate

15

GUI'yi tercih edeceğinizi söylediğinizi biliyorum, ancak komut satırı araçları işi güzelce yapacak. Windows'a yönelik unix araçlarından oluşan bir bağlantı noktası için GnuWin'e bakın . Yama komutuna ihtiyacınız var, tabii ki ;-)

Yine de, satır sonlandırmayla ilgili bir sorunla karşılaşabilirsiniz. GnuWin bağlantı noktası, patch dosyasının DOS stili satır sonlandırmasına (CR / LF) sahip olduğunu varsayacaktır. Yama dosyasını oldukça akıllı bir editörde açmaya çalışın ve sizin için dönüştürecektir.


İyi koy. Bu yorum olmadan hat sonlandırma problemini anlayamazdım.
Bryan

Satır sonlarıyla başa çıkmanın başka bir yolu da komut satırına "--binary" seçeneğini eklemektir.
BeReal82

4
Beni doğru yola iten buydu. Ancak, Windows 7 veya daha yeni bir sürümü çalıştırırken, her seferinde UAC açılır penceresinden kaçınmak için patch.exe bildirimini güncelleştirmeniz gerekir. Nasıl yapacağınızı öğrenmek için bu sayfaya bakın: math.nist.gov/oommf/software-patchsets/patch_on_Windows7.html
Anttu

1
UAC düzeltmelerinde bile, yamanın GnuWin sürümü dosya güvenliği ayarlarını bozar. Git ile gönderilen derlemenin her iki sorunu da yoktur.
Artfunkel

8

TortoiseSVN'de yama uygulaması işe yarar. Yamayı, oluşturulduğu dizine uygulamanız gerekir . Bunu akılda tutmak her zaman önemlidir. TortoiseSVN'de bunu nasıl yapacağınız aşağıda açıklanmıştır:

Düzeltme ekini uygulamak istediğiniz klasörü sağ tıklatın. Düzeltme eki dosyasının konumunu soran bir iletişim kutusu görüntüler. Dosyayı seçin ve bu, değiştirilen dosyaları listeleyen küçük bir dosya listesi penceresi açmalı ve her öğeye tıklandığında, düzeltme ekinin o dosyaya ne yapmak üzere olduğunu gösteren bir fark penceresi açılmalıdır.

İyi şanslar.


8
Bu yardımcı olmuyor. Hedef dosyalar bir SVN arşivinden çıkmadı. (Orijinal gönderinin düzenlemesine bakın.)
Mason Wheeler

8

Git kurulumundaki patch.exe yardımcı programı Windows 10'da çalışır.

Windows için Git'i yükleyin, ardından "C:\Program Files\Git\usr\bin\patch.exe"düzeltme ekini uygulamak için komutu kullanın.

Hunk #1 FAILED at 1 (different line endings).Düzeltme eki uygulanırken çıktıda a gibi bir hata iletisi varsa , komut satırına -l(için bir kısayol --ignore-whitespace) veya --binaryanahtarları eklemeyi deneyin .


Bu soru çoğunlukla, tipik komut satırı araçlarına aşina olmayan sıradan kullanıcılar için bir GUI aracıyla ilgilidir. En azından örnek olarak bazı tam örnek komutlar verdiyseniz, cevabınız daha yararlı olacaktır.
Álvaro González

Windows 10'da besteci ile çalışır
ecdani

7

Düzeltme eki yardımcı programının bu Win32 yerel bağlantı noktasını kullanabilirsiniz .

Diğer yardımcı programların daha büyük bir seçimiyle birlikte gelir ve Cygwin ve benzerlerinin aksine herhangi bir DLL veya benzeri gerekmez. Sadece seçtiğiniz küçük yürütülebilir dosyayı seçin ve istediğiniz yerde saklayın.

Basit kullanım:

patch.exe -i <patchfile>

Daha fazla yardım alın:

patch.exe --help

4
Windows 7'de bununla ilgili sorun yaşıyorum: yeni bir CMD penceresi açar ve çalıştırmayı denediğimde yönetici ayrıcalıkları ister patch.exe.
Roy Tinker

3
Düzeltme eki yürütülebilir dosyası Windows için Git paketinde de bulunabilir.
Snicksie

6
Patch.exe dosyasını çalıştırırken sorun yaşıyorsanız, bunu içermeyen herhangi bir adla yeniden adlandırabilirsiniz patch. Windows kelimesi ile tüm exes patchşüpheli olarak kabul eder.
wbond

2

DÜZENLEME: Şimdiye kadar verilen yanıtlara bakıldığında, Tortoise'ın yalnızca zaten sürümlendirilmiş bir dosya olduğunda doğru yapacağını görünüyor. Burada durum böyle değil. SVN deposundan gelmeyen bir dosyaya yama uygulayabilmem gerekiyor. Tortoise kullanmayı denedim çünkü SVN'nin diffs kullandığını ve hem bunları nasıl oluşturacağınızı hem de uygulayacağınızı bilmesi gerektiğini biliyorum.

Cygwin'i yükleyebilir , ardından yamayı uygulamak için komut satırı yama aracını kullanabilirsiniz. Ayrıca yama için geçerli olan bu Unix kılavuz sayfasına bakınız .


4
Evet, yapabilirim. Aslında Cygwin var. Muhtemelen çözümünüzü de çalıştırabilirim. Yine de kullanıcılarımı buna sokmayacağım. Bugünlerde kaç Windows kullanıcısının komut satırının ne olduğunu bile bilmediğine dair bir fikrin var mı? : P
Mason Wheeler

2

Görünüşe göre TortoiseSVN (TortoiseMerge) diff / patch dosyasındaki satırı gerektirirIndex: foobar.py . TortoiseSVN olmayan bir yama dosyasının TortoiseSVN'nin Sağ Tıkla Yama Uygula komutuyla çalışmasını sağlamak için yapmam gereken şey buydu .

Önce:

--- foobar.py.org   Sat May 08 16:00:56 2010
+++ foobar.py   Sat May 08 15:47:48 2010

Sonra:

Index: foobar.py
===================================================================
--- foobar.py
+++ foobar.py   (working copy)

Veya katılımcınızın çalıştığı spesifik düzeltmeyi biliyorsanız:

Index: foobar.py
===================================================================
--- foobar.py   (revision 1157)
+++ foobar.py   (working copy)

2

Http://www.msys2.org/ adresinden MSYS2 kullanıyorum

Bu gibi birçok yardımcı programları sağlar patch, which, git, tree, ve daha bir çok.

MSYS2'yi yükledikten sonra kurmak için paket yöneticisini çalıştırın patch:

pacman -S patch

Bu sadece bir komut satırı aracı yüklemenin karmaşık bir yoludur. Sorunun kendisini değil, yalnızca soru başlığını okuduğunuzdan şüpheleniyorum. :)
Álvaro González

1

Düzeltme eki hangi dosyaya uygulanacağını söyler. Başlık aşağıdaki gibi olmalıdır (Not Defteri'nde veya favori metin düzenleyicinizde görüntüleyin):

--- Folder/old_file
+++ Folder/new_file

Bir Subversion yaması durumunda, revizyon numaralarına da sahip olursunuz (dosya adları aynı olduğundan).

GNU yaması bu adları geçersiz kılmanıza izin verir , ancak aynı şeyi yapmak için herhangi bir GUI aracı bilmiyorum. Çeşitli diff programları ile kontrol ediyorum - olsa da, WinMerge yamalar uygulayarak destekler görünmüyor.


Hayır, yamamın üstünde böyle bir şey yok. Dosya adının ve yolunun farkın kendisine dahil edilmesi gerektiğini mi söylüyorsunuz? Bunu kim düşündü? Diğer klasörlerde bir şeyler yüklü olabilecek birine bir fark dağıtmak istiyorsanız ne yapmalısınız?!?
Mason Wheeler

Düzeltme ekinin üstü şu şekilde başlar: --- / +++ / @@ -6,12 +6,12 @@ Dosya adı falan yok. Yerleşik bir yolun nasıl çalışması gerekiyor? Yamayı XP'de oluşturduysam ve biri Vista'da (veya tersi) kullanmaya çalışıyorsa ve Belgeler klasörünün yolu farklıysa ne olur?
Mason Wheeler

1
Dosya adları deponun kök dizinine göreli olduğundan XP / Vista klasör yapısı farklılıkları önemli değildir. Düzeltme ekinde dosya adlarının bulunmasının nedeni, çoğu düzeltme ekinin birden çok dosyayı etkilemesidir.
David Z

Anlıyorum. Tamam, bu daha mantıklı. Temizlediğin için teşekkürler David!
Mason Wheeler

1

Eclipse bunu yapabilmeli, TeamSynchronize perspektifine gitmeli ve daha sonra Project-> Yama uygula


1

Java projeleri için yama dosyalarını uygulamak için NetBeans kullandım . Düzelttiğiniz Java kodu zaten bir NetBeans projesi değilse, bunun için bir proje oluşturun. Yeni bir proje oluşturmak için:

  • Dosya -> Yeni Proje menüsünü seçin
  • Ortaya çıkan iletişim kutusunda bir Java Uygulaması projesi yapın . İletişim kutusuna bir ad verin ve Tamam'ı tıklatın Finish.
  • Projenizin adını sağ tıklayın ve içerik menüsünden Özellikler'i seçin.
  • Açılan iletişim kutusunda Kaynaklar'ı seçin ve bir Kaynak Klasör ekleyin . Java kaynağınıza göz atın.

Artık bir projeniz var, yamayı uygulayın:

  • Projenizi seçmek için vurgulayın
  • Ana menüden Araçlar -> Fark Düzeltme Eki Uygula'yı seçin
  • Ortaya çıkan iletişim kutusunda yama dosyanıza göz atın, dosyayı seçin ve Yama düğmesine basın.

Bu kadar. Düzeltme ekiniz uygulanmalı ve değişiklikleri gösteren farklı bir pencere görmelisiniz.


1

Ben zaten difond ve birleştirme için BeyondCompare (ticari) kullanıyorum ve bu araç aynı zamanda yamalar oluşturma, görüntüleme ve uygulama yeteneğine de sahip .


1

Mercurial kullanıyorsanız , bu "import" ile yapılır. Yani komut satırında, hg importkomut veya --no-commitHg Workbench içinde (veya seçeneği yararlı bulabilirsiniz ) veya "Depo" => "İçe Aktar ...".

Bunların değişiklikleri varsayılan olarak uygulayacağını unutmayın; Bunu kullanarak önleyebilirsiniz hg import --no-commitkomut satırını kullanarak eğer seçeneği veya Hg Workbench'i kullanılan, sen konuya o yarayabilecek hg rollbackbirleştirme işlemi sonrasında.


Tam aradığım şey! Taahhütten nasıl kaçınacağımı merak ediyordum.
Keshav

0

TortoiseSVN kullanarak yamalar uygularken, genellikle teslim alınmış deponun kök dizinindeki yolu kaydederim. Daha sonra yamayı sağ tıklayabilir, TortoiseSVN menüsüne gidebilir ve ApplyPatch'i tıklayabilirsiniz. ApplyPatch, yamanın dizin hiyerarşisinde hangi seviyenin oluşturulduğunu otomatik olarak bulmalıdır.

Ancak, geçmişte yeni dosyalar içeren ya da dosyalara yeniden adlandırmalar içeren yamalar uygulamakla ilgili sorunlar yaşadım. Tortoise'ın bunun için kullandığı algoritma ne olursa olsun, bu senaryoları çok iyi ele almıyor gibi görünüyor. Unicode size benzer sorunlar verebilir.


0

İki monitörünüz var mı? TortoiseMerge ile aynı sorunu yaşıyordum ve monitörlerden birini devre dışı bıraktığımda dosya listesinin bulunduğu küçük pencerenin ortaya çıktığını fark ettim. Umarım bu size yardımcı olur.


0

"Çalışma kopyası değil" hata iletisi alıyorsanız, SVN'nin çalışma dizini olan TortoiseMerge iletişim kutusundan bir dizin seçmeyi deneyin.


0

Windows için bir BusyBox bağlantı noktasında hem diff hem patch komutu vardır, ancak yalnızca birleşik biçimi desteklerler.


0

Sadece kullan:

patch -p0 < path-file.patch

bu komutu yalnızca yamayı oluşturduğunuz klasör konumundan çalıştırmayı unutmayın.

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.