Bu, git ile etiketlendiği için , SVN bilgisi eksikliğinin ihmal edilebilir olduğunu umuyorum.
Şu anda bir repo klonlamak ve gitk kullanarak belirli bir dalı klonlamak.
Uzak havuzun tamamını yalnızca belirli bir dalda klonlamaktasınız.
Depo, en iyi şekilde bir veritabanı olarak düşünüldüğü için uzak veritabanının mevcut durumunu klonlarsınız. Fakat ondan sonra, bu veritabanının kendi kopyası üzerinde çalışıyorsunuz; taahhüt ederseniz, yerel veritabanınızı değiştirirsiniz.
fetch
Komut uzak biri ile senkronize yerel veri tabanını tutmak için kullanılır.
Genellikle bu yerel veri tabanından, üzerinde çalışmak için bir şubeye ödeme yaparsınız. Bu, şu anki çalışmanızın başladığı, git için içsel bir işaretleyici gibisi yoktur.
Diyelim ki basit bir depo üzerinde çalışıyorsunuz, ayrıca dalın olmadığı yerde , "sihri" ortaya çıkarmak için klasöre master
bakabilirsiniz .git
:
Son (üzerinde taahhüt varsayın master
edildi) 182e8220b404437b9e43eb78149d31af79040c66
, tam olarak göreceksiniz altından cat .git/refs/heads/master
.
Bundan yeni bir daldan dalladığınızda git checkout -b mybranch
, aynı göstericiyi dosyada bulacaksınız cat .git/refs/heads/mybranch
.
Şubeler "işaretçiler" den başka bir şey değildir. "Çalışan" işaretçisi a olarak adlandırılır HEAD
.
Nerede olduğunuzu bilmek istiyorsanız HEAD
:
cat .git/HEAD
Hangi diyor ki ref: refs/heads/mybranch
, hangi sırayla ( cat .git/refs/heads/mybranch
) bir karma iş78a8a6eb6f82eae21b156b68d553dd143c6d3e6f
Gerçek taahhütler objects
klasörün altında saklanır (nasıl bir konudur).
Proje klasörü yalnızca o dalın içeriğini içeriyor ve tüm dalları SVN'deki gibi göremiyorum, bu benim için biraz kafa karıştırıcı.
working directory
Git veritabanını bir bütün olarak karıştırmayın . Yukarıda söylediğim gibi, çalışma dizininiz yalnızca bir alt kümenin (belki de) anlık görüntüsüdür.
Diyelim ki farklı dallarınız var, çalışma dizininiz sadece o dalda çalışmaya adanmış (çalışmayı oradan başka bir yere koyabilmenize rağmen).
Genellikle, proje için hangi şubelerin tanımlandığını görmek istiyorsanız,
git branch
yerel şubeler için
git branch --remote
uzak şubeler için
git branch -a
her ikisi için de
(veya git branch -v
)
Git, dağıtılmış bir sürüm kontrol sistemi olduğu için, sadece yerel olarak / uzaktaki farklı şubeleri yapmak mümkün değildir.
Tipik iş akışım:
- dallanma özelliği dallanma özelliği
- bundan bir WIP dalı (devam eden iş) dalı
- istediğin gibi çalış - tek bir çizgiden sonra bile olsa; önemli değil
Özellik tamamlandığında:
WIP
şubeyi ezmek / yeniden işlemek (etkileşimli rebasing ile) = bundan tek bir taahhütte bulunmak
WIP
dalı özellik dalıyla birleştirin ve (github ile çalışıyorsanız bu teklife "çekme isteği" olarak adlandırılır) kararlı (ana) dalıyla bütünleşmesini teklif edin.
Ayrıca, aynı anda iki dalda wprl yapmam gereken bir işlemi nasıl ele alacağımı bilmek istiyorum. Örneğin, ana üzerinde bir düzeltme yapmam gerekiyor, ancak başka bir dalın içeriğini de tutmam gerekiyor.
Projenizin nasıl yapılandırıldığına bağlıdır:
Diyelim ki istikrarlı bir efendin var. Ve özellikler yalnızca bu sabit daldan geliştirilir - bu nedenle genellikle bir özellik dalının arkasında bulunur. Öyleyse, özellik dalının kökü olacak ana üzerine son bir söz vermeniz gerekirdi.
Daha sonra, ana dal üzerinde bir taahhütte bulunacaktınız ve her iki şubeyi bir araya getirip birleştirmeme veya yeniden yapılandırmaya karar verebileceksiniz (ki bu, ileri düzeyde ihtiyacı olan kullanıcılar için bir tür birleştirmedir).
Veya her zaman dallarda değişiklik yapabilir (ör. master
) Ve bunları başka dallara kopyalayabilirsiniz.
Şubeyi içeren klasörleri GIT'deki repo'dan klonlanmış yapmak için önerilen ad kuralları nedir, örneğin, myproject-branchname
Sana bağlı.
Genellikle, depo adı ile bitirdiniz.
Ancak bunun istenmediği durumlar vardır:
Örn: oh-my-zsh 'ı git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh
burada klonlamanız .oh-my-zsh
açıkça hedef olarak adlandırılmıştır.