github'da çatal ve dal arasındaki fark


127

Github'da barındırılan bir projeyi çatallarsam. Tüm dalları çatallayabilir miyim? Çatalımın hangi şubeye dayandığını nasıl bilebilirim? Başka bir deyişle, bilgisayarıma hangi şube indirilecek?


1
Basit İngilizce açıklaması: Dal, ana çataldan gelen çatal gibidir. Çatal, ana dalı olmayan bir dal gibidir.
Ken Kin

Yanıtlar:


41

GitHub'daki tüm dallar bir çatalda kopyalanacaktır. (Açıkçası, bu ilk etapta GitHub'a asla gönderilmemiş dalları içermez.)

Ancak çatal, GitHub'dan GitHub'a bir işlemdir; PC'nize hiçbir şey kopyalanmaz. Git klonuyla tamamen aynı değil . “Bir projeyi klonladığımda ne kopyalanır?” Diye sormak istiyorsanız, kılavuzuna bakın git-clone(1).


153

Bu şekilde düşün:

Repo [sitory] , ekibin bir veya daha fazla branştaki ortak çalışmasına karşılık gelir. Tüm katkıda bulunanların kendi kopyaları vardır.

Ana deponun her bir çatalı , bir katılımcının çalışmasına karşılık gelir. Bir çatal, kullanıcı hesabınızda deponun bir klonunu depolamak için gerçekten bir Github (Git değil) yapısıdır. Bir klon olarak, çatalı yaptığınız anda ana depodaki tüm dalları içerecektir.

Nasıl çalışmak istediğinize bağlı olarak çataldaki ve / veya ana depodaki her şube birkaç tür şeye karşılık gelebilir. Her dal, projenin bir sürümüne başvurabilir, ancak düzeltmeler veya deneysel çalışma gibi farklı geliştirme kanallarına da karşılık gelebilir.

Çekme isteği (GitHub ekosistemde) görev karşılık gelir. Ana depoya izole edilmiş bitmiş bir göreve katkıda bulunmak istediğimde , o görevde yapılan taahhütlere karşılık gelen bir çekme talebi oluşturuyorum . Bu hareketin kaydedilmesini benim ya çekilir çatal ya da benim şube için ana repo .

Bir taahhüt yasasında yapılacak değişiklikler kümesidir. Bu Git ile ilgili en ilginç şeylerden biri. Dosyaları aktarmazsınız, değişiklik günlüklerini aktarırsınız.


4
fork / branch için çekme isteği eşlemesi gibi ilgili tüm bitleri nasıl açıkladığınız hoşunuza gitti. "dosyaları aktarmazsınız, değişiklik günlüklerini aktarırsınız" ... Bunu zaten biliyordum ama bu cümle mükemmel!
harshvchawla

2
artı bir çatalın bir github olduğunu açıklığa kavuşturmak için git değil. Teşekkürler!
emery.noel

10

Fork, GitHub tarafındaki bir klondur (her şeyi klonlar).
Bir repo klonlarken, söz konusu reponun tüm geçmişini tüm şubeleriyle birlikte alıyorsunuz.

Teoride uzak bir deponun varsayılan dalını değiştirebilseniz bile , GitHub deposundan bir klon esas olarak ana dalı arar. Yani, bir GitHub klonunun alacağı "varsayılan" dalı değiştirmek için, ana dalı yeniden adlandırmanız gerekir.


Yani çatallı repoyu klonladığımda (bilgisayarıma etkin bir şekilde indirdiğimde), tüm şubeler bilgisayarımda mı? Ancak bir dalda fazladan dosyalar eklenmiştir. Bilgisayarımda bu dosyalar olacak mı, olmayacak mı?
Jonathan.

1
@Jonathan: PC'niz tüm dosyaları içeren tüm dalları alacak. Ancak çalışma dizininiz ( bu dallardan birini ödünç aldığınız alan ) aslında bu dosyaları göreceğiniz tek alan olacaktır.
VonC

SO diğer dosyalar gerçekte .git klasöründe nerede depolanır?
Jonathan.

@Jonathan : gevşek veya paketlenmiş nesneler olarak, bkz. Book.git-scm.com/7_how_git_stores_objects.html (nesneler bir blob ("dosyalarınız"), ağaç, commit veya etiket: book.git-scm.com/ 1_the_git_object_model.html )
VonC

4

Bir projeyi çatallaştırırsanız, tüm projenin bir kopyasını git hub hesabınıza yaparsınız. PC'nizle hiçbir şeyle başa çıkmıyorsunuz

PC'nizde bir kopya oluşturmak için onu klonlamanız ve her şeyi çekmeniz gerekir ve o projenin tüm dallarını ve kodunu alacaksınız


2

Github web sitesinden bir projenin çatalını oluşturursanız, tüm dalları upstream projesinden alırsınız.

Yeni basılan fork'unuzdan yerel PC'nize klonlarsanız origin, PC'nizdeki uzaktan kumandanız çatalınızın Github'daki ana dalına işaret eder.


Help.GitHub sayfasına göre Bir projeyi çatallamak, şubeyi oluşturmak upstreamyapmanız gereken bir şeydir; ve size bunu nasıl yapacağınızı söylerler.
JC Salomon

2
Bu bir uzak, dal değil.
Arrowmaster

1

Bu çok iyi açıklanabilir. GitHub'da merkezi bir deponuz var. Bazı değişiklikler yapmak için kişisel bilgisayarınızda bir kopyasını aldığınızda, ana deponun bu yerel klonuna çatal denir.

Şube farklı bir şeydir ve çatal / depoya dahildir. Aslında şube, gelişimin farklı aşamalarındaki işinizdir. Bir dizi işlevi kaydetmek, farklı kullanıcılara erişim sağlamak, siteyi müşteriye göstermek vb. İçin gerektiğinde ve gerektiğinde oluşturulurlar.


1

Branches'i ne zaman ve Forks'u ne zaman kullandığımıza dair gerçek hayattan bir örnek paylaşmak istiyorum.

Mağazamızda GitLab var ve bazen bir Laravel projesinden paketler üzerinde çalışmamız gerekiyor. Normalde bir şube oluştururuz ve gerçek Laravel projesiyle çalışırken yerel VM geliştirici ortamımızda test ettiğimiz şubeye değişiklikleri göndeririz.

Diyelim ki projemiz şu adrestedir:

https://github.com/yardpenalty/mainproject.git

Şube kullanımı:

Şube çağrıldı diyelim It_doesnt_matter

Üretim için istediğimiz şekilde şubemize sahip olduktan sonra, bu şubeye son adımımızı atıyoruz ve daha sonra test için UAT'ye giren bir birleştirme talebi oluşturuyoruz.

Birleştirme gelen It_doesnt_matter şube şimdi ana projeye itilir

en https://github.com/yardpenalty/mainproject.git

Diyelim ki paket proje şu adrestedir:

https://github.com/yardpenalty/mypackage.git

Ana projenin üretimde bu paketi kullandığını unutmayın, bu nedenle onları bu pakete iterek değişiklik yapamayız (diğer nedenlerin yanı sıra). Diyelim ki bir web geliştiricisinin üretimde değişiklik yapmak için bu paketi düzenlemesi gerekiyor.

Paketi vb. Yayınlamadan değişikliklerimizi göremeyeceğimiz için basit bir şube çalışmayacaktır.

Çatal Kullanımı: Şimdi, paketimizle biraz hile yapmamız gerektiğinde, üretim paketinin bir çatal aracılığıyla bir klonunu oluşturuyoruz. Composer.json dosyaları, artık bir Kullanıcı veya Grup yolunda bulunan çatalı işaret edecek şekilde güncellenebilir.

Böylece bir çatal oluşturacağız https://github.com/yardpenalty/mypackage.git

ve ara https://github.com/yardpenalty/yards/mypackage.git

Şimdi composer.json dosyamızı "depolarımızda" bu paketi işaret edecek şekilde güncelleyebiliriz : [böyle bir dizi gibi ve uzaklaşıyoruz!

 {
            "type": "github",
            "url": "https://github.com/yardpenalty/yard/mypackage.git"
 }

]

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.