GitHub'da Forking ve Cloning arasındaki fark nedir?


187

Bir projenin çatalını yapmak ve bir projeyi yapmak arasındaki farkları bilmek istiyorum clone.

GitHub üzerinden çekme istekleri gönderebilir miyim, ancak bir projeyi çatalladım?



2
Buraya Git insanlar için Git (GitHub değil) ile bir "çatal" açıklaması arıyor. Git'te "fork" komutu yoktur. Bu daha çok GitHub (Git değil), bir kavram. Kolayca unutulan bir ayrım.
ambassallo

Yanıtlar:


113

Temel olarak, evet. A fork, sadece GitHub'ın projeyi klonlaması ve kullanıcı adınız altında kaydettirmesi için bir taleptir ; GitHub ayrıca iki havuz arasındaki ilişkiyi de takip eder, böylece iki proje (ve diğer çatallar) arasındaki taahhütleri ve çekimleri görselleştirebilirsiniz.

Yine de, kullanmasanız bile insanların klonlanmış deponuzdan çekilmesini isteyebilirsiniz fork- ancak bunu kendiniz herkese açık hale getirmekle uğraşmanız gerekir. Veya geliştiricilere git format-patchağaçlarına uygulayabilecekleri yamaları (bkz. ) Gönderin.


4
Çatalların güncellenmesi klonlardan çok daha fazla iş gerektirir. Bir klon basit ile güncellenebilir git pull. Bir çatal birden fazla komut alır. Ve şaşırtıcı değil, neredeyse baktığım her çatal güncel değil. Çatallar steroidlerdeki Maven depo problemine benzer. Güncel olmayan bir repo (Maven) yerine binlerce tane var (Git).
jww

@jww klonla yapışmak için elinden geleni yapıyor - neden çatal kullanıyorsunuz?
serup

@serup - Çatallı kopyanın içinde bulunabilmesinin nedeni git pullhala var olan bir ilişki var. Tüm kopyayı kendi yerel makinenizde klonladıysanız ve orijinal repo ile olan bağlantısını kestiyseniz.
JonH

134

Bir havuzu çatalladığınızı söylediğinizde , temel olarak GitHub kimliğiniz altında havuzun bir kopyasını oluşturuyorsunuz. Burada dikkat edilmesi gereken ana nokta, orijinal depoda yapılan değişikliklerin çatallı depolarınıza geri yansıtılacağıdır (getirmeniz ve yeniden takmanız gerekir). Ancak, çatallı deponuzda herhangi bir değişiklik yaparsanız, orijinal depoya açıkça bir çekme isteği oluşturmanız gerekir . Çekme talebiniz orijinal deponun yöneticisi tarafından onaylanırsa , değişiklikleriniz mevcut orijinal kod tabanı ile yapılır / birleştirilir . O zamana kadar, değişiklikleriniz yalnızca çatalladığınız kopyaya yansıtılacaktır .

Kısacası:

Fork & Pull Modeli, herkesin mevcut bir depoyu çatallamasına ve kaynak havuzuna erişim izni vermeden değişiklikleri kendi çatallarına aktarmasına olanak tanır. Değişiklikler daha sonra proje sorumlusu tarafından kaynak deposuna çekilmelidir.

Çatalladıktan sonra deponuzu (adınızın altındaki) makinenizde yerel olarak klonlayabileceğinizi unutmayın. İçinde değişiklik yapın ve çatallı deponuza itin. Ancak, orijinal depodaki değişikliklerinizi yansıtmak için çekme talebinizin onaylanması gerekir.

Birkaç diğer ilginç tartışmalar -

Git çatalları aslında git klonları mıdır?

GitHub çatallı havuzunu nasıl güncelleyebilirim?


24
"Burada dikkat edilmesi gereken ana nokta, orijinal depoda yapılan değişikliklerin çatallı depolarınıza geri yansıtılacağıdır." Bence bu biraz yanıltıcı. AFAIK, çatal sonra orijinal depo yapılan değişiklikler vardır değil , otomatik olarak çatal yansıtılır; bu değişiklikleri manuel olarak taşımalısınız. Çataldan önce gerçekleşen değişiklikler , çatal düğmesini tıklattığınızda yeni çatala kopyalanır.
Ajedi32

"Orijinal depoda yapılan herhangi bir değişiklik çatallı depolarınıza geri yansıtılacaktır" .. gerçekten ?? Otomatik olarak umarım
KansaiRobot

Bir müşterinin projesi için çalışıyordum ve iş için klonlama ve itme modelini kullanıyordum. Bir gün onu çatalladım ve hemen tam repo çatal ihtiyacını söyleyen bir mesaj aldım. Bunun nasıl yanlış kabul edildiğini gerçekten anlamıyorum?
user3075740

çataldan sonra orijinal depoda yapılan değişiklikler otomatik olarak çatala yansıtılmaz, ancak bunu yapmak için bu blogun 3. adımına bakın: - help.github.com/articles/fork-a-repo
Suhas Chikkanna

"Orijinal depoda yapılan herhangi bir değişiklik çatallı depolarınıza geri yansıtılacaktır" - klonlandıktan sonra bunun mümkün olmadığı anlamına mı geliyor?
değişken

26
  • Çatallı proje çevrimiçi deponuzda (repo).
  • Klonlanmış proje yerel makinenizde (genellikle repoyu çatalladıktan sonra klonluyorum).

Çevrimiçi repo işleminde bulunabilirsiniz (veya yerel repo'nuzu taahhüt edip ardından çevrimiçi repo'nuza itebilirsiniz), sonra çekme isteği gönderebilirsiniz.

Proje yöneticisi, değişikliklerinizi ana çevrimiçi sürümünde almak için kabul edebilir.


13

Klon, bir deponun iki (muhtemelen farklı) sürümünde uygun çoğaltma ve ayırma işleminin yapıldığı yerdir. Bir repo değiştirildiğinde, yeni içeriğin bir push komutu kullanılarak aktif olarak diğer repo'ya kopyalanması gerekir. Ve diğer repodaki değişiklikler getirildi.

Bir sunucuyu depoladığınızda, her iki depo da aynı sunucudaki aynı [sabit nesne] içeriği kullanacağından içeriğin çoğaltılmasına gerek yoktur. 'Hile' farklı kullanıcı bakış açılarını yönetmekte, böylece her kullanıcı repo'nun tam kişisel bir kopyasına sahip olduğuna inanmaktadır. Çatallar arasındaki itme ve getirmeler, kullanıcının işaretleyicilerini günceller.

Daha düşük bir seviyede git aynı şeyi dahili olarak yapar. Her biri içeren üç farklı dosyanız varsa, Hello Worldgit sadece Hello World blobunun tek bir kopyasını 'çatallar' ve gerektiğinde her üç yerde de sunar.

Sunucuda çatallanma yeteneği, Github'un büyük depolama ödeneğinin ortalama olarak o kadar büyük olmadığı anlamına gelir, çünkü her bir beden tek bir repoyu paylaşır.


5

Özetle, Forking belki de "GitHub ID / profiliniz altında klonlama" ile aynıdır. Çatal, bir istisna dışında, her zaman bir klondan daha iyidir. Çatallı depo her zaman klonlanmış bir depodan farklı olarak orijinal depo ile izlenir / karşılaştırılır. Bu, değişiklikleri izlemenizi, çekme isteklerini başlatmanızı ve orijinal depoda yapılan değişiklikleri çatallı olanınızla manuel olarak senkronize etmenizi sağlar.


5

@ AniketThakur'un yanıtı çok iyi. Aşağıdaki soruyu henüz kimse yanıtlamadı.

GitHub üzerinden çekme istekleri gönderebilir miyim, ancak bir projeyi çatalladım?

Hayır. Bir depoya katkıda bulunuyorsanız şunları yapabilirsiniz: Yerel bir klon yapın. Yerel bir şube yapın. Söz konusu şubeye taahhüt ekleyin. Yerel dalı github'a geri itin (işlemde uzak bir dal oluşturma). Bu dalın ana dalda (veya istediğiniz herhangi bir dalda) birleştirilmesini isteyen bir çekme isteği yapın.


3

Sorucunun işaret ettiği şeyi yaptıysanız (çatallamayı unuttum ve yerel olarak bir repoyu klonladı, değişiklikler yaptı ve şimdi bir çekme isteği yayınlamanız gerekiyor) tekrar yola çıkabilirsiniz:

  1. çekmek istediğiniz repoyu çek
  2. yerel değişikliklerinizi uzaktan kumandanıza aktarın
  3. sorun çekme talebi

2

GitHub'daki bir başka garip ince fark, değişiklikleriniz orijinal repoya çekilene kadar çatallardaki değişikliklerin etkinlik günlüğünüzde sayılmamasıdır. Dahası, bir çatalı uygun bir klon haline getirmek için, görünüşe göre Github desteğine başvurmanız gerekir.

Gönderen Why katkılarım görünmüyor :

Taahhüt bir çatalla yapıldı

Çatalla yapılan taahhütler, katkılarınıza dahil edilmez. Bunları saymak için aşağıdakilerden birini yapmanız gerekir:

Değişikliklerinizin ana depoda birleştirilmesi için bir çekme isteği açın . Çatalı ayırmak ve GitHub'da bağımsız bir depoya dönüştürmek için GitHub Destek ile iletişim kurun . Çatalın kendine ait çatalları varsa, çatalların deponuzla yeni bir ağa taşınması veya mevcut ağda kalması gerektiğini destekleyin. Daha fazla bilgi için, bkz . " Çatallar hakkında ".


2

Özetle, "fork" kendi GitHub hesabınızda barındırılan projenin bir kopyasını oluşturur.

"Clone", kaynak kodu indirmek için bilgisayarınızda git yazılımını kullanır ve bu sürümün tüm sürüm geçmişi

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.