Git deposundan yama veya diff dosyası oluşturun ve başka bir git deposuna uygulayın


155

WordPress tabanlı bir proje üzerinde çalışıyorum ve projemi WP'nin her yeni sürümüne eklemek istiyorum. Bunun için, iki işlem veya etiket arasında bir yama oluşturmak istiyorum.

Örneğin, Repo'mda /www/WPbunu yapıyorum:

$git patch-format com1..com2 --stdout > ~/patchs/mypatch.patch

Veya

$git patch-format tag1..tag2 --stdout > ~/patchs/mypatch.patch

/www/WP git natif WordPress

/www/myproject Git projem WordPress tabanlı

git applyBiz farklı depolarda olduğu için çalışmıyor komut satırı, sanırım.

Taahhüt olmadan, sadece diferansiyel olmayan bir yama dosyası oluşturabilir ve başka bir git deposuna uygulayabilir miyim?

Şimdiden teşekkürler.

Yanıtlar:


243

Sadece aşağıdakiler için uygun birleşik bir farkgit diff üretmek için kullanabilirsiniz :git apply

git diff tag1..tag2 > mypatch.patch

Daha sonra elde edilen yamayı aşağıdakilerle uygulayabilirsiniz:

git apply mypatch.patch

1
Teşekkür ederim Enrico, kullandım $git diff -u tag1..tag2 > mypatch.patchve $git apply --stat > mypatch.patchcevap 0 files changedbaşka bir öneri lütfen? :)
zatamin

Bağımsız değişken olarak düzeltme eki dosyasının yolunu belirtmeniz gerekir git apply. Cevabımı bir örnekle güncelledim.
Enrico Campidoglio

1
git diff -p tag1 tag2 > my.patchHangi iyi çalıştı kullandım .
barclay

Yamaları birleştirilmiş fark biçiminde nasıl yapabilirim? sourceware.org/glibc/wiki/… diyor Only unified diff (-uNr) format is acceptable.ama denediğimde git diff -uNr tag1..tag2 > mypatch.patchmesajı alıyorumusage: git diff [<options>] [<commit> [<commit>]] [--] [<path>...]
Aaron Franke

2
Dikkatli olun git diff ...+ git apply ...silinen / taşınan dosyaları düzgün işlemeyin ... git format-patch ...+ git am ...yaptığınızda.
vrince

50

Birkaç işlem için yama üretmek için format-patchgit komutunu kullanmalısınız , örn.

git format-patch -k --stdout R1..R2

Bu işlem taahhütlerinizi posta kutusu biçiminde yama dosyasına aktarır.

Son işlem için düzeltme eki oluşturmak üzere şunu çalıştırın:

git format-patch -k --stdout HEAD^

Sonra başka bir havuzda yamayı amgit komutu ile uygulayın, örn.

git am -3 -k file.patch

Bakınız: man git-format-patchve git-am.


1
Uygulanabilecek bir yama ne olacak patch -p1? sourceware.org/glibc/wiki/…
Aaron Franke

Yamayı linux'dan winodws'a taşıyordum, bu yüzden burada belirtildiği gibi --ignore-whitespace kullanmak zorunda kaldım stackoverflow.com/questions/13190679/…
Mahesh

2
@AaronFranke, '-p' seçeneğini deneyebilirsiniz: git format-patch -p HEAD ^ 1
Piroxiljin

Bu, orijinal taahhütlerin taahhüt mesajlarını, yazarını ve taahhüt tarihlerini tutma avantajına sahiptir.
M Justin

0

Tamamlayıcı olarak, yalnızca belirli bir taahhüt için yama üretmek için şunları kullanın:

git format-patch -1 <sha>

Düzeltme eki dosyası oluşturulduğunda, diğer repo'nuzun kullandığınızda nerede olduğunu bildiğinden emin olun git am ${patch-name}

Düzeltme ekini eklemeden önce git apply --check ${patch-name}, hiçbir konunun olmadığından emin olmak için kullanı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.