Hem git hem de sürüm kontrolü için yeniyim, bu yüzden bir yama nedir ve git'te yaptığım etkinliklerin geri kalanından nasıl farklı olduğunu anlamaya çalışıyorum?
Ne zaman bir yama uygularım? Her taahhüt ettiğimde olur mu?
Hem git hem de sürüm kontrolü için yeniyim, bu yüzden bir yama nedir ve git'te yaptığım etkinliklerin geri kalanından nasıl farklı olduğunu anlamaya çalışıyorum?
Ne zaman bir yama uygularım? Her taahhüt ettiğimde olur mu?
Yanıtlar:
Bu blog yayınında nasıl bir yama oluşturabileceğinizi görebilirsiniz (iletişim kurmak ve başka bir repoya uygulamak istediğiniz değişikliklerin koleksiyonu)
( Jan AERTS tarafından yayınlanan " Bioruby with git: nasıl çalışır? " adlı 2008 blog yazısından resim )
Ayrıca başka bir somut örnek olarak Git ile Raylara Katkı Sağlama bölümüne bakın .
Bugünlerde, GitHub çekme isteği GitHub depolarına yama uygulamayı gerçekten kolaylaştırıyor , bu doğrudan bir katılımcı olmadığınızda yararlıdır (yani doğrudan bir repoya itme hakkınız yoktur).
Aslında, son zamanlarda GitHub yeni yamaların bildirimini iyileştirmek için " Daha İyi Çekme İsteği E-postaları " nı tanıttı .
Yama , metin dosyalarını düzeltme eki dosyası adı verilen ayrı bir dosyada bulunan yönergelere göre güncelleştiren bir Unix programıdır.
Yani, başka bir deyişle, talimatları içeren dosya veya bu dosyayı işleyen ve bir şeye uygulayan bir program anlamına gelebilir.
Şimdi, yama dosyası nedir? Diyelim ki 2 satırlı bir metin dosyanız var:
This is line A.
This is line B, or otherwise #2.
Sonra ilk satırı değiştirirsiniz ve şimdi dosyanız şu şekilde görünür:
This is SPARTA.
This is line B, or otherwise #2.
Dosyanın içeriğindeki değişikliği nasıl tanımlarsınız? İlk satır "Bu A satırı" diyebilirsiniz. "Bu SPARTA" ile değiştirilir, hatta ilk satırın son sözcüğü olan "A" bile başka bir "SPARTA" kelimesiyle değiştirilir. Ve tam olarak fark bize bunu söyler. Diyelim ki bu dosyanın iki sürümü var, biri file1.txt ve diğeri file2.txt, sonra diff çalıştırın ve bunu olsun:
$ diff -u file1.txt file2.txt
--- file1.txt 2011-11-26 11:07:03.131010360 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
Değişikliklerin açıklamasını alarak, bunu ilk içeriğe uygulayabilir ve değiştirilmiş bir içerik alabilirsiniz. Ve "yama" benzeri programların anlayabileceği birleşik biçime getirilen bu değişikliklere yama dosyası denir. Sana balık tutmayı öğrettikleri birinden balık almak yerine, o balığı sulardan kendin kazabilirsin. Şimdi, patch2.txt dosyasına tam olarak benzemesi için yamamızı file1.txt dosyasına uygulayalım:
$ cat file1.txt
This is line A.
This is line B, or otherwise #2.
$ cat file2.txt
This is SPARTA.
This is line B, or otherwise #2.
$ diff -u file1.txt file2.txt > changes.patch
$ cat changes.patch
--- file1.txt 2011-11-26 11:09:38.651010370 -0500
+++ file2.txt 2011-11-26 11:07:13.171010362 -0500
@@ -1,2 +1,2 @@
-This is line A.
+This is SPARTA.
This is line B, or otherwise #2.
$ patch < changes.patch
patching file file1.txt
$ cat file1.txt
This is SPARTA.
This is line B, or otherwise #2.
$
Bu dosyanın sadece iki sürümüne sahip olmanın daha kolay olduğunu düşünebilirsiniz. Bu basit durumda doğru. Ancak çok fazla dosyanız varsa ve bu dosyalar çok büyükse, her şeyin iki kopyası yerine birkaç satır değişiklik yapmak çok daha verimlidir.
Git açısından konuşurken, yama dosyası hala aynı anlama gelir, ancak diff + patch'i kullanmak bir kabus olur. Örneğin, bunları karşılaştırmak için her zaman dosyanın iki sürümünün (hatta tüm deponun) teslim alınmış olması gerekir. Kulağa hoş gelmiyor, değil mi? Git sizin için tüm zor işleri halleder - yerel dosyanızı çalıştığınız havuzda bulunanlarla karşılaştırır ve size "fark" olarak gösterebilir veya bu "fark" ı yama aka değişikliklerinizi yapın, hatta zaten sahip olduğunuz bazı yama dosyalarını uygulamanıza izin verin. Ayrıntılara girmeden, bu anlamda git, SVN, hatta CVS veya performans gibi diğer sürüm kontrol sistemleriyle kesinlikle aynıdır.
Umarım yardımcı olur!
patch
programı kullandığını hiç bilmiyordum . Git'in kendi uygulaması olduğunu düşündüm.
Yama, bir depoda yapılan değişiklikleri gösteren küçük bir dosyadır. Genellikle ekibinizin dışından biri salt okunur erişime sahip olduğunda, ancak iyi bir kod değişikliği olduğunda kullanılır. Daha sonra bir yama oluşturur ve size gönderir. Uygula ve git deposuna aktar. Daha sonra herkes güncellenmiş sürümden yararlanır ve düzeltme ekinin yazarının okuma / yazma erişimine ihtiyacı yoktu.
Bu gerçekten bir güvenlik şeyidir (en azından insanların bunu kullanması).
git diff
değişiklikleri varsayılan olarak yamalar olarak gösterir, git apply
bir yama uygulamanızı sağlar vb.).
Yama dosyası, herhangi bir sıraya herhangi bir sırada uygulanabilecek tek bir değişiklik kümesini temsil eder. Düzeltme ekini kullanarak bir veya daha fazla dosya arasında farklar elde edersiniz. Ve daha sonra, yeni dosyalarda değişiklikleri almak için farklılıkları (yama) uygulayabilirsiniz. Git'te bir yama için birçok kullanım alanı vardır. Çalışma dizininizde taahhüt edilmemiş değişiklikleriniz varsa ve bu değişiklikleri başka bir yere uygulamak için almanız gerekiyorsa, bir yama oluşturun ve yamayı uygulayın.
git diff > mypatch.patch
Deponuzda (izlenmemiş) yeni dosyalarınız varsa, düzeltme eki oluşturmadan (işleme koymayın) önce dosyayı hazırlamalı ve aşağıdaki komutu kullanmalısınız
git diff --cached > mypatch.patch
Daha sonra yamayı uygulayabilirsiniz:
git apply mypatch.patch
Git deposunda bazı değişiklikler yapmak istiyorsanız, yazma izniniz yok, sadece değişiklikleri yapın ve her ikisi arasında bir yama oluşturun ve yamayı yama uygulama iznine sahip birine gönderin. değişiklikleriniz o git deposuna eklenmelidir.
git format-patch <base_commit_or_branch_name>
özetim : = bugüne kadar <base_commit_or_branch_name> 'ye kadar olan tüm taahhütleri, diff ve taahhüt mesajlarını içeren güzel ve temiz dosyalara sarın, bunları yamalamak isteyen birisine kolayca göndermek için (ör: e-posta yoluyla) kod tabanları. Daha sonra alıcı, sisteminizi dosyanızla yamalı:cat *.patch | git am
Yama, aralarında neyin farklı olduğunu göstermek için bir veya daha fazla dosya arasındaki farklar kümesidir. Genellikle birisine neyi değiştirdiğinizi göstermek için bir düzeltme eki oluşturursunuz. Bunu ne zaman yapabileceğinize bir örnek, açık kaynaklı bir uygulamada bir hatayı bulup düzelttikten sonra düzeltmeyi hata izleyicisine yüklediğinizdir.