Git'de pull ve clone arasındaki fark nedir?


237

Doing (after mkdir repoand cd repo) arasındaki fark nedir :

git init
git remote add origin git://github.com/cmcculloh/repo.git
git fetch --all
git pull origin master

ve

git clone git://github.com/cmcculloh/repo.git

Demek istediğim, açıkçası biri daha kısa, ama bunun dışında temelde aynı şeyi yapıyorlar mı?

Yanıtlar:


122

Temelde aynıdır, ancak klon sadece ana değil, ek uzaktan izleme dalları kuracaktır. Kılavuz sayfasına göz atın :

Bir havuzu yeni oluşturulan bir dizine klonlar, klonlanan depodaki her dal için uzaktan izleme dalları oluşturur (git dal -r kullanılarak görünür) ve klonlanmış havuzun şu anda etkin olan dalından çatallanmış bir başlangıç ​​dalı oluşturur ve denetler.


10
git fetch --all ek uzaktan izleme dalları kurar, bu nedenle temelde aynıdır.
cmcculloh

251

git cloneüzerinde çalışmak üzere mevcut bir deponun yerel bir kopyasını nasıl alacağınızdır. Etrafında birden fazla çalışma kopyası olmasını istemiyorsanız, genellikle belirli bir havuz için yalnızca bir kez kullanılır. (Ya da yerel olanı karıştırdıktan sonra temiz bir kopya almak istersin ...)

git pull(veya git fetch+ git merge) bu yerel kopyayı uzak depodaki yeni taahhütlerle nasıl güncellediğinizdir . Başkalarıyla işbirliği yapıyorsanız, sık sık çalışacağınız bir komuttur.

İlk örneğinizin gösterdiği gibi, git clonediğer git komutlarının bir çeşitliliği ile taklit etmek mümkündür , ancak (veya tersi) ile git pull"temel olarak aynı şeyi" yapan gerçekte durum böyle değildir git clone.


4
Git klonunun "git pull" i içeren komut dizisi tarafından gerçekleştirilemediği tam olarak ne?
cmcculloh

21
@cmcculloh: Hiçbir şey - tanımladığınız dizi "git clone" işlevini etkili bir şekilde gerçekleştirir. Mesele şu ki, "git pull", orada yaptığınızın ötesinde çeşitli şeyler yapmak için kullanılır - "git pull" un aslında "git fetch; git merge <current branch> <origin / geçerli şube> ". IOW, gerçekten klon olmadan yaşayabilir ve gerçekten istersen çekebilirsin. Ayrıca, klonladığınızdan başka depolardan da çekebilirsiniz. "Klon" u "beni bu repo'nun yerel bir kopyası yap" ve "çekme" yi "belirtilen uzaktan kumandanın güncellemelerini al" olarak düşünmeyi seviyorum.
ebneter

120

Laymen dilinde şunu söyleyebiliriz:

  • Klonla : Uzak deponun çalışan bir kopyasını alın.
  • Çekin : Ben bunun üzerinde çalışıyorum, lütfen başkaları tarafından güncellenebilecek yeni değişiklikleri alın.

3
Ben düşünüyorum da çekin tanımı da söylenebilir Klon
henrywright

10
Klonlamadığınız bir şey üzerinde nasıl çalışabilirsiniz?
Jyoti Prakash

Ne demek istediğini anlamıyorum?
henrywright

@henrywright umut, ebneter'ın cevabı sorunuza cevap verecektir
Mrk

41

git clone sisteminizdeki deponun bir kopyasını yaptığınız anlamına gelir.

git fork depoyu Github hesabınıza kopyaladığınız anlamına gelir.

git pull son değiştirilen depoyu getirdiğiniz anlamına gelir.

git push havuzu değiştirdikten sonra iade ettiğiniz anlamına gelir.

Layman'ın terimiyle:

git clonegit pullindiriyor ve yeniliyor.


9

klon : Uzak sunucu deposunu yerel makinenize kopyalama.

pull : yerel makinenize başka değişiklikler eklediniz.

Aradaki fark bu.

Klonlama genellikle uzaktan repo kopyası almak için kullanılır.

Çekme, takım halinde çalışıyorsanız, diğer takım arkadaşlarına eklenen kodu görüntülemek için kullanılır.


5

git clone , uzak sunucu deposunda çalışmakta olanı tam olarak indirmek ve bu projenin yerleştirildiği makinenin klasörüne kaydetmek için kullanılır. Çoğunlukla sadece projeyi ilk kez yükleyeceğimizde kullanılır. Bu çekme işleminden sonra daha iyi bir seçenektir.

git pull temelde bir (clone (download) + merge) işlemidir ve çoğunlukla ekip çalışması olarak çalışırken kullanılır. Başka bir deyişle, o projedeki son değişiklikleri istediğinizde çekebilirsiniz.


3

Bayan Clone: ​​Yerelde yeni bir kopya alıyorum.

Bay Pull: Zaten yerel olarak aldım, sadece güncelliyorum.


Bayan Clone: ​​Yaptıklarınızı yapabilirim! Sen sadece benim alt kümemsin.

Bay Pull: Aynen!


Bayan Clone: ​​Hayır, yaratmıyorsunuz. Bu benim işim:

  1. Boş çıplak depo oluştur
  2. Uzaktan izleme dallarını doldurma
  3. Git getirmeyi bağımsız değişkenler olmadan çalıştır

Sadece # 3 yapıyorsun ve sonra birleştirmem gerekmiyor, ki benim yapmam gerekmiyor (benimki taze).

Bay Pull: Smarty pantolon, önemli değil, önce "git init" yapacağım! O zaman aynıyız. Ayrıca mevcut repoda ekstra 'birleştirme' yeteneğine sahibim! Bu da beni Git'te en çok kullanılan komut haline getiriyor;)


Git yaratıcıları: Atlarınızı tutun Bay Pull, eğer --bare veya --mirror klon veya init ile kullanılırsa, birleştirme işleminiz gerçekleşmez. Salt okunur olarak kalır.


Yetersiz cevap.
sinekonata

2

Hmm, klonladığımda yaptığım gibi çektiğimde uzak dalı "4.2" olarak görmek için ne eksik? Bir şey açıkça aynı değil.

tmp$  mkdir some_repo

tmp$  cd some_repo

some_repo$  git init
Initialized empty Git repository in /tmp/some_repo/.git/

some_repo$  git pull https://github.ourplace.net/babelfish/some_repo.git
  :
From https://github.ourplace.net/babelfish/some_repo
 * branch            HEAD       -> FETCH_HEAD

some_repo$  git branch
* master

vs

tmp$  rm -rf some_repo

tmp$  git clone https://github.ourplace.net/babelfish/some_repo.git
Cloning into 'some_repo'...
  :
Checking connectivity... done.

tmp$  cd some_repo

some_repo$  git branch
* 4.2

Ben de bunu fark ettim ve git varsayılanları zaman içinde değişikliklerin sorun olduğundan şüpheleniyorum. Windows'ta 1.9.5.msysgit ve bir mac'ta 2.3.2-applegit-55 var.
AnneTheAgile

2

git clone URL ---> Tam proje veya depo ayrı bir dizin olarak indirilecektir. ve sadece değişiklikleri değil git URL'sini çekin ---> getir + birleştir -> Tüm projeyi değil, sadece yapılan değişiklikleri getirir


1

İken git fetchkomut henüz yok o sunucu üzerindeki tüm değişiklikleri aşağı alıp bunu, hepsi adresinden çalışma dizinini değiştirmez. Verileri sizin için alır ve kendiniz birleştirmenize izin verir. Ancak, çoğu durumda hemen ardından git pullgelen bir komut denir .git fetchgit merge

Daha fazla bilgi için: https://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Pulling


1
Bu bağlantı soruyu cevaplayabilirken, cevabın önemli kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
ekad

0

Klonla :: Yerel makinenizde uzak depo projenizin tam olarak kopyasını oluşturur.

Çekme -: İki ya da ikiden fazla kişinin aynı veri havuzunu paylaştığını varsayın. (Diyelim ki başka bir kişi adı Syam) bölgenize yansıtmayın. Bu yüzden yereldeki bu yeni değişiklikleri yansıtmak için git pull'u kullanmalısınız. Genel olarak projeyi güncellemek için git pull kullanıyoruz.

Yani temelde git klonunu sadece bir kez kullanıyoruz, git çekmeyi ise birçok kez kullanıyoruz.

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.