Git Format-Patch ile oluşturulan bir yama nasıl uygulanır?


221

Her ikisi de aynı uzak depoya işaret eden 2 git yerel depoları var.

Bir git deposunda, eğer yaparsam git format-patch 1, bu yamayı diğer depoya nasıl uygulayabilirim?

Yanıtlar:


330

Not: Önce yamanızın ne yapacağının önizlemesini yapabilirsiniz:

İlk önce istatistikler:

git apply --stat a_file.patch

Sonra hataları tespit etmek için kuru bir çalışma:

git apply --check a_file.patch

Son olarak, git amdüzeltme ekinizi bir taahhüt olarak uygulamak için kullanabilirsiniz : uygulanan bir düzeltme ekini kapatmanıza izin verir.
Bu daha sonra başvurmak için yararlı olabilir.

git am --signoff < a_file.patch 

Bu makaledeki bir örneğe bakın :

Git günlüğünüzde, kaydedilen iletilerin bir "Tarafından imzalandı" etiketi içerdiğini göreceksiniz. Bu etiket, taahhüdün kodda nasıl sonuçlandığı hakkında yararlı bilgiler sağlamak için Github ve diğerleri tarafından okunacaktır.

Misal


9
Kendine not: 200. Büyük Cevap altın rozeti.
VonC

4
git am < somepatch.patch"ölümcül: boş kimlik adı (<> için) izin verilmez" değerini verir. Birisi bana nedenini açıklayabilir mi?
gromit190

@ gromit190, yamadaki kötü Authorbaşlıklar anlamına gelir ve / veya yapmadınız git config user.{name,email}.
ulidtko

TAMAM; git apply --checkdiyor patch does not applyve git apply -3diyor repository lacks the necessary blob to fall back on 3-way merge.Git'te, yeniden basma taahhütleri böyle bir esinti; ancak insanlar güncellenen kodun üstüne yamalarını nasıl yeniden oluştururlar ?
ulidtko


163
git apply name-of-file.patch

25
Bu, orijinal ayrıntılı soruyu cevaplamamış olabilir, ancak başlıktaki soruyu yanıtladı, bu yüzden bu sayfadayım. teşekkür ederim!
Rock Lee

12
Bunun eski bir soru ve cevap olduğunu anlıyorum ... ama bazı insanlar için git Apply ve git am arasındaki farkı anlamanın yararlı olabileceğini düşündüm .
mgarey

1
git uygula "[... dosyanın tam yolu ...] / file-of.p.patch"
Anton Lyhin

41

Veya eski okulu tekmeliyorsan:

cd /path/to/other/repository
patch -p1 < 0001-whatever.patch

3
Sadece farkında olursunuz: Bu bir taahhüt oluşturmaz, bu nedenle taahhüt mesajı ve yazar bilgilerini kaybeder.
Caesar

22

Öncelikle ve arasındaki fark hakkında bir not almalısınız.git amgit apply

Kullanırken git amgenellikle birçok yama uygulamak istersiniz. Bu nedenle şunları kullanmalısınız:

git am *.patch

ya da sadece:

git am

Git yamaları otomatik olarak bulur ve sırayla uygular ;-)

UPD
Burada bu tür yamaları nasıl oluşturacağınızı bulabilirsiniz


1
Farkın bu açıklaması bana yardımcı oldu git apply.. ve --reverse:-) 👍
Jordan Gee


14

JetBrains IDE (IntelliJ IDEA, Android Studio, PyCharm gibi) kullanıyorsanız, yama dosyasını sürükleyip IDE'nin içine bırakabilirsiniz ve yamanın içeriğini gösteren bir iletişim kutusu görünecektir. Şimdi tek yapmanız gereken "Düzeltme ekini uygula" yı tıklamaktır ve bir taahhüt oluşturulur.


1
Bunun için teşekkürler. Bu gerçekten herkes için yararlı. Kabul edilmiş bir cevap var. ancak bu da faydalıdır.
Lasitha Benaragama

1
@ambarox Ama bu cevap bir kez reddedildi, neden bilmiyorum
ice1000

1
yamalar uygulamak için tek yol komut satırı üzerinden olduğunu düşünüyorum biri olabilir. : Sana bir oy verdim. şerefe arkadaşlar.
Lasitha Benaragama

1
@LasithaBenaragama - tür. SO, sadece OP'ye değil, aynı zamanda takip eden herkese de yardımcı olmak içindir. Bu cevap (yararlı olsa da) genel bir çözüm sağlamaz. Bu mükemmel bir küçük blog yazısı yapar, ancak "ÇOK iyi" bir cevap olmaz. Downvote açıklar!
OldTinfoil

-2

Aşağıda belirtilen cmd kullanabilirsiniz

git apply fileName.patch
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.