Git deposunun yapısı


15

Üzgünüm, bu bir kopya ise, baktım.

Git'e taşınıyoruz. Subversion'da \ trunk, \ branch ve \ tags klasörlerine sahip olmaya alışkınım.

Git ile dallar arasında geçiş yapmak çalışma dizininin içeriğini değiştirecektir, bu yüzden eskiden çalışma şeklimizin Git ile geçerli olmadığını varsaymak doğru muyum?

Benim tahminim belki bir gitignore ve readme.txt ile bir repo klasörüne sahip olacağım, daha sonra repoyu oluşturan projeler için klasörler ve hepsi bu.

Yanıtlar:


15

Şimdi "master" olarak adlandırılan "gövde" ye sahip olacaksınız, şimdi "head" olarak adlandırılan "şubelere" sahip olacaksınız ve hala "tags" olarak adlandırılacak "etiketler" e sahip olacaksınız , ancak bunlar klasör olmayacak, bunlar " refs ", depodaki ayrı bir ad alanında yaşayan düzeltmelere yönelik etiketler.

Subversion ve Git'in dallanma için farklı yolları vardır. Temel alt sürüm modeli, tek bir genel zaman çizelgesine sahip bir dizin ağacına sahip olmaktır ve dallamak istiyorsanız, başka bir dizine bir alt ağaç kopyalayabilirsiniz.

Öte yandan Git, her birinin ebeveynini tanımladığı revizyonları olan bir dizin ağacına sahiptir, ancak her revizyonun birden fazla ebeveyni (birleştirme) ve birden çok çocuğu (şubeleri) olabilir. Böylece şubeler için dizinler yerine, bağımsız olarak revizyonlar elde edersiniz. "Refs" sadece verilen "dal" için en son revizyonla ilişkilendirilmiş adlardır.

Bu fark dağıtılmış sürüm kontrolü için esastır. Git'in (ve diğer dağıtık sistemlerin) geçmişi doğrusal tutmak için merkezi bir yetkisi yoktur, bu nedenle revizyonlar birbirini bilmeden bağımsız olarak birden fazla depoda oluşturulabilir ve sistemin bunları barındırması gerekir. Genelleme, dallanmayı ve birleştirmeyi genel olarak çok daha kolay hale getirir.

Git'te düzeltmelerin herhangi bir dalda olmadığını unutmayın. Onlar sadece ve dallar onları içerir. Ancak şube birleştiğinde veya ölü sokak olduğunu kanıtladıktan sonra, ona işaret eden "ref" yi silebilir ve tamamen unutabilirsiniz (eski denemeleri atarsanız, sonunda çöp toplanırlar git gc). Bu, eski deneylerde bataklıktan kaçınmanıza yardımcı olur, kimse artık ne hakkında olduklarını hatırlamıyor.


Güzel. Etiket, dal ve diğer klasör saçmalıklarına gerek yoktur. Güzel.
Luke Puplett

2
@LukePuplett: Subversion'un dallanma yöntemi oldukça benzersiz. Perforce'den geliyor ve buna sahip diğer tek sürüm kontrol sistemi olduğuna inanıyorum. Yıkımın bir dalın ne olduğunu açıkça ayırt etmemesi, birleştirme algoritmasını büyük ölçüde karmaşıklaştırır. Biraz esneklik sağlar, ancak bu esneklik 3 yönlü birleştirme ile gerçekten desteklenmez ve bu da anlaşılması zor köşe kasalarına yol açar.
Jan Hudec

CVS (SVN'lerin manevi öncülü olan) bile bu (oldukça garip) dallar ve etiketler aslında dizinler yaklaşımını kullanmamıştır. Ben CVS iyi dalları yaptığını söylemiyorum, ama en azından onlar sadece bir dizin yerine "uygun" bir kavram nerede.
Joachim Sauer

@JoachimSauer: CVS'nin Subversion'un manevi öncülü olduğundan emin değilim . "Daha iyi CVS" yapma misyonuna girdiler, ancak ağırlıklı olarak Perforce'tan kavramlar aldılar.
Jan Hudec

@JanHudec: bu çok iyi olabilir, Perforce hakkında fazla bir şey bilmiyorum. Demek istediğim tam olarak bu görev: CVS'nin ardılı olmak.
Joachim Sauer

3

Git'i SVN'de 2D'de gördüğünüz verilerin 3B görünümü olarak düşünün - yani SVN ile kökünüzü dallarsınız ve ağaçta yeni bir klasör olarak gösterilen bir kopya olarak görünür. Git ile dalladığınızda, mevcut ağacınızın üst kısmında "katman" olarak gösterilen bir kopya olarak görünür. Farkı kavramanın oldukça kolay olduğunu anladıktan sonra.

SVN ile, Git ile aynı şekilde çalışabilirsiniz - dallar arasındaki geçiş, kod tabanının tekli görünümünü dallanmış görünümle değiştirir, svn anahtarı veya git kasası kullansanız da bu geçerlidir.

Açıkçası SVN'de bir dalın kopyasını, klasörün bulunduğu yere kontrol ederek alabilirsiniz; bu, git deposunu diskinizdeki farklı bir konuma kopyalamakla aynıdır.

Aynı şey etiketler için de geçerlidir - bir git revizyonunu etiketleyebilir veya bir sürüm için şube oluşturabilirsiniz. SVN etiketleri dallarla aynıdır, tek kuralları 'etiketler' olarak adlandırılır. Bir sürümün anlık görüntüsünü almak için SVN deposunu da etiketleyebilirsiniz (düzeltme numarasını kaydedebilirsiniz).

Git ve svn arasındaki farklar, kaynak denetiminin temelleriyle değil, check-in ve check-out işlemlerinin nasıl gerçekleştiğiyle ilgilidir. Kodun görünümü farklı olabilir (git'te dallar içeren kod ağacının tek bir görünümünü asla göremezsiniz ve SVN'de kısmi bir havuzu dallayabilirsiniz, ancak bunlar sonuçta küçük farklardır)

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.