Git Evreleme: Ne zaman sahne alacaksınız? Sonradan değişiklik olursa ne yapmalı


9

Git'in geniş dünyasında yeniyim. El kitabını okudum ve pratik yaptım, ancak aradıktan sonra anlayamadığım birkaç yönü hakkında kafam karıştı.

Merak ediyorum:

  • Bir projede (ilk taahhüt sonrası), kaynak dosyaları yerleştirmek için doğru an ne zaman? Taahhüt etmeden hemen önce? Ekledikten / sildikten veya değiştirdikten hemen sonra?

  • Dosyalar iki işlem arasında yarıya dizilirse ve sonra değiştirilirlerse, Git'e ne olur? İçeriğin ifade edildiğinde ve o zamandan beri ne olduğu konusunda dikkatli olması gerekiyor mu?

  • Yeni bir dosya oluşturursam, hazırlar ve daha sonra silmek isterseniz, Git neden "-f" işaretini kullanmamı istiyor ve basit bir "git -rm file.ext" çalışmıyor?

Git hakkında el kitabı ve diğer öğreticilerin "Ne anlama geldiği" ve diğer çeşitli konuları okudum ama dediğim gibi, yukarıdaki hususları hala anlamıyorum.

Bu yüzden, eğer yapabiliyorsanız, soruları kendi kelimeleriniz ve örneklerinizle cevaplayın, böylece daha iyi anlama şansım olabilir.

Teşekkür ederim.


1
Küçük bir işi bitirdiğimde (taahhüt için çok küçük) veya bazı değişikliklerden önce emin olmadığım dosyaları hazırlıyorum. Size uygun olanı yapın. Size hem aşamaları hem de değişmemiş değişiklikleri gösteren bir araç (örneğin, git gui veya git cola) bulun ( git diffve git diff --cachediyi, ama bazen daha fazlasını istiyorum).
maaartinus

Yanıtlar:


4

Evreleme alanının amacı, taahhüdünüz için esnek bir alana sahip olmaktır . Sanırım yıkım gibi merkezileştirilmiş sürüm kontrol sistemlerine gittiğinizde bu daha net olacak.

yıkılma

Subversion'da, çalışma kopyanızın belirli dosyalarını teslim etmeyi seçebilirsiniz. Ama sadece tam dosyalar. Şimdi: Dosyaya Adeğil, dosyaya Bve dosyanın dosyayla Cilgili Akısımlarına değil, dosyadaki değişikliklere bağlı olan kısımlara değil B(o zamandan beri taahhüt tutarlılığıyla ilgili bir sorun yaşarsınız).

Git

Git, sahnelemenin ikinci çalışma kopyası olarak sağlayarak bunu çözer. Evreleme alanı içinde (kabaca konuşacağınız) bir anlık görüntü oluşturuyorsunuz.

Bu nedenle, hazırlama alanında, değişiklikleri içeren bir anlık görüntü Ave Cyalnızca değişiklikleri yansıtan bir dosya sürümü oluşturabilirsiniz A.

Özel sorular için

  • İstediğiniz noktada sahne alabilirsiniz. Taahhüdü başlatmadan hemen önce şahsen sahnelemeyi tercih ederim.

  • Hazırlanmış bir dosyada değişiklik yaptıktan sonra çalışma kopyasında bu dosyayı değiştirirken, aşamalı dosyayı elbette değiştirmediniz. Bunları da sahneleyip yerleştirmeyeceğinize veya bu değişiklikleri sahneleyip yerleştirmeyeceğinize karar verebilirsiniz. Yani git gui citoolkoşarsanız aşamalı ve düzensiz sürümlerin farklarını göreceksiniz (satır bazında evreleme ve taahhüt için güzel ve basit araçlar).

  • Git burada temkinli, muhtemelen iyi bir şey.

Genel taahhüt stratejisi: Ayrıntılı taahhütler

Bence "Ne zaman sahnelemeliyim" sorusundan bahsederken, taahhüt alışkanlıkları hakkında da konuşmak gerekir.

Merkezi VCS

Merkezi bir sunucuya bağlı olduğunuz merkezi sürüm kontrol sistemlerinde, iş arkadaşlarınız için taahhütlerinizin eksiksiz ve iyi test edilmiş olması önemlidir. Böylece insanlar sık ​​sık işlememeye ve sonra hata olasılığını en aza indirmek için tam dosyaların durumunu taahhüt etmeye çalışırlar. Bu nedenle, bir taahhüt, çok sayıda değişiklik içeren (basit düzeltmeler değilse) oldukça büyük parçalar olma eğilimindedir. Bir taahhütteki değişiklikler tamamen ilgisiz olabilir.

Git

Git'te yerel olarak bir işlem yapılır, yalnızca sunucuya iletilmesi onları herkese açık hale getirir. Dolayısıyla bir taahhüt bir anlamda ucuzdur . Yıkım anlamında bir taahhüt, git commitbunu takip eden birkaç kişi ile karşılaştırılabilir git push. Bu fark önemlidir.

Git, aynı dosyadaki diğer satırları değiştirmiş olsanız bile, tek bir kod satırı uygulamanızı sağlar. Yeni bir özellik getiren 300-350 satırlarını değiştirirken 100. satırda bir güvenlik hatası düzeltmesi uygulayabileceğiniz için bu size birçok avantaj sağlar.

  • Farklı taahhütlerde farklı değişiklikleri ayırabilirsiniz. Bu, onları sürüm geçmişinizde güzel bir şekilde ayırır ve hatta birini geri döndürmenize izin verir, ancak diğerini değil.
  • Taahhüdünüzün mutlaka çalışma kopyanızın "derleme" durumunu yansıtması gerekmez (her ne kadar ben böyle tutmaya çalışsam da).

Peki, bir yıkım kullanıcısının beklediği bir taahhütte "kalite kontrol" ve inşa garantisi nerede? Git'teki diğer eylemlere kaydırılır. Yine de halka açık bir depoda programın işleyen bir durumunu dışarı itmek istiyorsunuz. Bu nedenle değişikliklerinizi yapmadan önce testlerin başarılı olduğundan ve programın çalıştığından emin olursunuz.

Ayrıca, dalları maks. Çok sayıda küçük değişiklik yaparken, oldukça büyük bir sürüm geçmişi elde edersiniz. Dallarda çalışıyorsanız, bu parçalı taahhütleri dal adına göre kategorize edebilir ve daha sonra birleştirebilirsiniz (seçenek --no-ffayrıca bu özelliklerin benzersiz bir dalda yaşandığını da koruyacaktır).

Yani master, şube iyi durumda ise, şubeye birleşme alışkanlığını koruyabilirsiniz . Etiketleri ayrıca kilometre taşlarını ve sürümleri izlemek için de kullanabilirsiniz.

Şimdi evrelemeye geri dönelim: Her taahhütte birkaç satır taahhüt ettiğinizde, taahhütte bulunmadan önce doğrudan sahne alacaksınız. (En azından ben böyle yaparım).


git add -pçok güzel.
Vorac

2

Bence çok ciddiye alıyorsun. Evreleme, yalnızca bir sonraki işleme dahil etmek istediğiniz şeyleri seçmektir. Evrelemeyi ne zaman veya nasıl yaptığınız çok nadiren önemlidir; ve herhangi bir anda çok sayıda aşamalı ve düzensiz değişikliğiniz varsa, muhtemelen geliştirme sürecinizi gözden geçirmeniz gerekir.

Bir projede (ilk taahhüt sonrası), kaynak dosyaları yerleştirmek için doğru an ne zaman? Taahhüt etmeden hemen önce? Ekledikten / sildikten veya değiştirdikten hemen sonra?

Genellikle taahhütte bulunmadan hemen önce yapıyorum (bazı yazım hataları fark etmiyorsam, bu yüzden son dakika düzeltmesi yapmam ve sahneye koymam gerekiyor). İşlem şu şekildedir: düzenleme, çalıştırma testleri, sahne, kesinleştirme. Testten önce sahne alırsanız, testler başarısız olur ve değişiklikler yapmak ve bunları da hazırlamak zorundasınız, o zaman neden teslim süresine kadar bırakmıyorsunuz?

Dosyalar iki işlem arasında yarıya dizilirse ve sonra değiştirilirlerse, Git'e ne olur? İçeriğin ifade edildiğinde ve o zamandan beri ne olduğu konusunda dikkatli olması gerekiyor mu?

Reponun mevcut durumu ile (son taahhüt + aşamalı değişiklikler) arasındaki farkı gösterecektir. Yeni değişikliklerin bazılarını aşamalandırdığınızda, yalnızca (son işleme + aşamalı değişiklikler) durumunu yeniden hesaplar.

Yeni bir dosya oluşturursam, hazırlar ve daha sonra silmek isterseniz, Git neden "-f" işaretini kullanmamı istiyor ve basit bir "git -rm file.ext" çalışmıyor?

Şimdi burada tahmin ediyorum, ama muhtemelen aşamalı bilgi önemli olabilir (aksi takdirde aşamazsınız), ancak henüz sürüm kontrolü altında değil (kaldırabileceğiniz bir dosya gibi git -rm). Yani gitne yaptığınızı bildiğinizden emin olmak istiyor.

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.