36 Soru: Git'teki tüm uzak dallar nasıl klonlanır?

tarafından oluşturulan soru Fri, Dec 15, 2017 12:00 AM

Her ikisi de GitHub 'a itilmiş master ve development şubem var. clone d, pull ed ve fetch ed var, ancak master dalından başka bir şey bulamıyorum.

Belli bir şeyi özlediğimden eminim, ancak kılavuzu okudum ve hiç sevinç duymuyorum.

    
3861
  1. Burada kabul edilen cevap (git branch -a) size uzaktaki şubeleri gösterir, ancak bunlardan herhangi birini kontrol etmeye çalışırsanız 'müstakil bir HEAD' durumunda olacaksınız . Aşağıya doğru olan bir sonraki cevap (ikinci en çok oy alan) farklı bir soruyu yanıtlar (zekâ: tüm dalları nasıl çeker ve yine, yalnızca yerel olarak izleyenler için işe yarar). Yorumların birçoğu, git branch -a sonuçları, tüm uzak dalları yerel olarak izleyebilecek bir kabuk komut dosyasıyla ayrıştırabileceğinize işaret ediyor. Özet: İstediğinizi yapmanın hiçbir yerel yolu yoktur ve yine de bu kadar iyi bir fikir olmayabilir.
    2012-06-18 22: 43: 52Z
  2. Belki de tüm klasörü eski moda bir şekilde kopyalayabilir misiniz? scp some_user@example.com:/home/some_user/project_folder ~ Bu çözümün github için işe yarayıp yaramadığından emin değil ..
    2012-09-26 22: 51: 07Z
  3. "Klonladım, çektim ve getirdim" demekten ziyade, yaptığınız tam komutları bize göstermekten çok daha iyi.
    2013-11-22 18: 17: 25Z
  4. Neden "klon" un tam bir kopya anlamında olmadığı beni rahatsız ediyor. Kesin bir klon ise, tüm şubeler yerel havuzun bir parçası olmamalı mı? Yani bu dağıtılma noktalarından biri değil mi? Öyleyse bir şey depo gittiğinde, hala her şeyin tam bir kopyası var. Yoksa “uzak” olarak adlandırılan gerçekten yerel havuzun bir parçası mı?
    2016-07-11 06: 31: 03Z
  5. Tüm olumlu notları, cevapları, cevapları ve akıllara durgunluk veren görüşlerini görünce, bunun yapılması için bir komut eklendi. Ve haklısın @ huggie, tam olarak düşüncelerim.
    2016-08-29 04: 29: 36Z
  6. 30 Yanıtlar                              30                         

    İlk önce, bir uzaktan klonu Git deposu ve cd içine:

     
    $ git clone git://example.com/myproject
    $ cd myproject
    

    Ardından, havuzunuzdaki yerel şubelere bakın:

     
    $ git branch
    * master
    

    Ancak deponuzda saklanan başka dallar var! Bunları -a bayrağını kullanarak görebilirsiniz:

     
    $ git branch -a
    * master
      remotes/origin/HEAD
      remotes/origin/master
      remotes/origin/v1.0-stable
      remotes/origin/experimental
    

    Bir yukarı akış dalına hızlıca göz atmak istiyorsanız, doğrudan kontrol edebilirsiniz:

     
    $ git checkout origin/experimental
    

    Ancak, bu şube üzerinde çalışmak istiyorsanız, şu şekilde otomatik olarak yapılan yerel bir izleme dalı oluşturmanız gerekir:

     
    $ git checkout experimental
    

    ve göreceksiniz

     
    Branch experimental set up to track remote branch experimental from origin.
    Switched to a new branch 'experimental'
    

    Son satır bazı insanları atar: "Yeni dal" - ha? Bunun anlamı, dalın dizinden alınması ve sizin için yerel olarak yaratılmasıdır. önceki satırı, şubenin uzak şubeyi izlemek üzere kurulduğunu belirttiği için daha bilgilendiricidir; bu, genellikle kaynak /şube_adı dalı

    anlamına gelir.

    Şimdi, yerel şubelerinize bakarsanız, göreceğiniz şey şudur:

     
    $ git branch
    * experimental
      master
    

    git remote'u kullanarak birden fazla uzak depoyu gerçekten izleyebilirsiniz.

     
    $ git remote add win32 git://example.com/users/joe/myproject-win32-port
    $ git branch -a
    * master
      remotes/origin/HEAD
      remotes/origin/master
      remotes/origin/v1.0-stable
      remotes/origin/experimental
      remotes/win32/master
      remotes/win32/new-widgets
    

    Bu noktada, işler oldukça çılgına dönüyor, bu yüzden neler olup bittiğini görmek için gitk'u çalıştırın:

     
    $ gitk --all &
    
        
    4303
    2017-04-25 08: 57: 54Z
    1. Birisi tüm öğeleri otomatik olarak nasıl oluşturabilir?ote şubeleri, ör. kökeni için deneysel /deneysel?
      2009-06-04 16: 33: 36Z
    2. Cristian: Her dalın kökeni /foo 'için her zaman bir' foo 'dalı oluşturdum, ancak bu iki soruna yol açtı: karşılık gelen uzak dalın arkasında çok sayıda taahhütte bulunan çok sayıda eski bayağı izleme dalı ve (2) git'in eski sürümlerinde, 'git push' komutunu kullanmak, yerel dalları bir uzak noktaya, bu dallar eskiyken bile zorlamaya çalışır. Bu yüzden şimdi sadece aktif olarak geliştirdiğim şeyler için yerel şubeleri tutuyorum ve onlar hakkında bilgiye ihtiyacım olursa doğrudan orijine /* şubelerine erişiyorum. (Bu, 'git branch -a' öğesini ayrıştırmak için bir kabuk komut dosyası kullanabileceğinizi söyledi.)
      2009-07-20 21: 44: 51Z
    3. "git alma < origin-adı > < şube adı >" şubeyi sizin için yerel olarak indiriyor.
      2010-02-07 17: 10: 29Z
    4. İyi cevap, ancak soruyu çok özlüyor. Uzaktaki tüm şubeleri kontrol etmek için bir liner arıyordum.
      2010-10-19 21: 01: 04Z
    5. Soru tüm uzak şubeleri klonlamak, kontrol etmemekle ilgiliydi. Ve yukarıda belirttiğim gibi, gereğinden fazla yerel izleme şubesi yapmak istemiyorsunuz, çünkü gerçekten bayatladıklarında baş ağrısına neden olabilirler.
      2010-10-28 12: 43: 44Z

    Aynı anda almak istediğiniz birçok uzak dalınız varsa, şunu yapın:

     
    $ git pull --all
    

    Artık, uzaktan depoya çarpmadan, ihtiyaç duyduğunuz her dalı kontrol edebilirsiniz.

        
    779
    2015-02-06 20: 04: 11Z
    1. Git klonu yaparsam, yerel olarak ana şubem var ve "uzak" 10 şubem var. Bu yüzden Gabe'nin BU cevabı çok yardımcı oldu ve soruyu cevapladı.
      2012-01-27 19: 07: 30Z
    2. bu, yalnızca yerel olarak eklenmiş uzak dalları getirir herhangi bir uzak dal
      2012-02-10 11: 45: 59Z
    3. İlk komut gereksiz. Basitçe git pull --all da aynısını yapacak - sadece iki kez getirilmeyecek. Ve infosec812, bunun yine de soruyu cevaplamaması konusunda haklı. Bunun nasıl bu kadar çok oy aldığını merak ediyorum.
      2012-04-06 14: 03: 57Z
    4. git remote update yaptıktan sonra git branch'u denedikten sonra yalnızca yerel şubeleri görüyorum. Ama git branch -a'u yaparsam şimdi uzak şubeleri görebilirim ve istediğim şubeyi elde etmek için git pull <branchname>'u yapabilirim. - Bu soruyu bir Google aramasından çıkardım ve bu cevap sorunumu çözdü.
      2013-01-31 16: 47: 57Z
    5. Bu hiç yardımcı olmuyor, mevcut olan dışındaki uzak dalları çekmiyor.
      2013-04-11 15: 02: 56Z

    Bu Bash betiği bana yardımcı oldu:

     
    #!/bin/bash
    for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
        git branch --track "${branch##*/}" "$branch"
    done
    

    Master (muhtemelen orijinal klonlama komutundan almış olduğunuz) dışındaki tüm uzak dallar için izleme dalları oluşturacaktır. Bence hala bir

    yapmanız gerekebilir  
    git fetch --all
    git pull --all
    

    emin olmak için.

      

    Bir liner : git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs Her zamanki gibi: rm -rf universe'ı bildiğimiz gibi kopyalamadan önce kurulumunuzu test edin

         

    Bir liner için krediler cfi kullanıcısına gider

        
    397
    2016-04-20 15: 49: 36Z
    1. Bu, mükemmel bir çözüm olmaya çok yakın. Bunu daha iyi hale getirecek tek şey, bu işlevselliğin git'te bir seçenek olarak yerleşik olması durumunda. div>
      2011-10-27 17: 15: 12Z
    2. "Bir liner": git branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs Her zamanki gibi: rm -rf universe as we know it'u kopyalamadan önce kurulumunuzu test edin
      2012-09-18 12: 38: 54Z
    3. Bu komut, özellik dallarını uzaktaki normal dallar olarak oluşturur (özellik dalları değil) - bu nasıl düzeltilir?
      2014-03-20 14: 31: 48Z
    4. dal adlarında "/" ile ilgili sorunlar yaşarsanız, git git takma adının kullanıldığı bir çözüm aşağıdadır. "Hiç kimse" tarafından verilen cevaba bakınız "konulu cevap 15 Mayıs 13: 11: 02"
      2015-01-12 11: 54: 18Z
    5. Ad alanlarını korumak için sadece remotes/origin/'u kırpıyorum: for BRANCH in $(git branch -a | grep remotes | grep -v HEAD | grep -v master); do git branch --track "${BRANCH#remotes/origin/}" "${BRANCH}"; done
      2015-07-02 08: 33: 47Z

    --mirror seçeneğinin kullanılması, remote izleme dalını düzgün bir şekilde kopyalıyor gibi görünüyor. Bununla birlikte, depoyu çıplak bir havuz olarak ayarlar, bu nedenle daha sonra normal bir depoya dönüştürmeniz gerekir.

     
    git clone --mirror path/to/original path/to/dest/.git
    cd path/to/dest
    git config --bool core.bare false
    git checkout anybranch
    

    Referans: Gittiğimde: uzaktan izlenen tüm şubelerle?

        
    318
    2015-10-19 09: 21: 38Z
    1. Bunun oyu olmasa da aslında oldukça iyi bir cevap gibi göründüğünü biliyorsunuz. Bu şekilde yapmanın bir sakıncası var mı? Bu komutları çalıştırdıktan sonra bir şubeyi açıkça kontrol etmek zorunda kaldım.
      2012-01-12 04: 25: 11Z
    2. Bu, git push --mirror ile birlikte, github.com'dan bir github kurumsal kurulumuna taşınırken uzak bir git reposunun tam bir kopyasını oluşturmak için tam olarak ihtiyacım olan şeydi. Teşekkürler!
      2012-09-11 22: 59: 53Z
    3. @ Dave: Klonlanan depodaki geçerli şubenin başını kontrol etmek için son komut olarak son bir git checkout ekleyin. Bu harika bir cevap, en iyisi. Cesur ol, sonunda seni zirveye çıkaracağız :-)
      2012-09-18 07: 37: 29Z
    4. @ Dave: Hm. İkinci düşüncelerim var: --mirror, tüm şubeleri izlenecek şekilde ayarlamaktan fazlasını yapar. Tüm referansları kaynak koddan kopyalar ve bunu takiben git remote update tekrar yapar. Çekme değişiminin davranışı. Tam kopyanın tek satırlı bir komut dosyası gerektirdiğine inanmaya geri döndüm.
      2012-09-18 11: 53: 06Z
    5. git clone --mirror git depolarınızı yedeklemek için çok iyidir ^ _ ^
      2013-05-20 21: 19: 43Z

    Fantezi "git checkout -b somebranch origin /somebranch" sözdizimini kullanmadan bir şubeye kolayca geçebilirsiniz. Yapabilecekleriniz:

     
    git checkout somebranch
    

    Git otomatik olarak doğru olanı yapacak:

     
    $ git checkout somebranch
    Branch somebranch set up to track remote branch somebranch from origin.
    Switched to a new branch 'somebranch'
    

    Git, aynı ada sahip bir dalın tam olarak bir uzaktan kumandada olup olmadığını kontrol eder ve açıksa, uzak bir şube olduğunu açıkça belirttiğiniz şekilde izler. Git 1.8.2.1'deki git-check-out man sayfasından:

      

    Eğer < branch > değilbulundu ancak içinde bir izleme şubesi var   eşleşen bir adla tam olarak bir uzaktan kumanda (< remote > olarak adlandırın) olarak adlandırın   eşittir

     
    $ git checkout -b <branch> --track <remote>/<branch>
    
        
    211
    2013-05-09 15: 19: 35Z
    1. Öyleyse, dalınızın adı checkout uzak dalın adıyla aynıysa, "/" öğesinden sonraki her şey, git git Aynı isim, "/" den sonra her şey, "uzaktan kumanda" mı takip ediyor? Ve izleyerek, demek istediğimiz: git push, git pull, vs. bu uzaktan kumandada yapılacak mı? Eğer bu doğruysa, daha fazla bilgiyle cevabınızı genişletin, @Daniel ile aynı fikirde olduğum için bu cevap daha fazla hak etmeyi hak ediyor.
      2012-06-14 22: 08: 23Z
    2. @ BullfrogBlues, tüm sorularınıza yanıtınız evet gibi görünüyor (git v1.7.7.4 kullanıyorum). Bu davranışın daha iyi bilinmesi gerektiğine katılıyorum. (Git bu sürümü için kılavuzunda değil.) Aslında bu davranıştan hoşlanmıyorum, bir hata alıyorum ve açıkça git checkout --track origin/somebranch demek zorunda kalıyorum.
      2012-07-03 13: 05: 56Z
    3. @ dubiousjim: Aslında, bu kılavuzda. git-checkout (1) şöyle diyor: "Eğer < branch > bulunmazsa ancak eşleşen bir adla tam olarak bir uzaktan kumandada (bunu < remote > olarak adlandır)) eşleşen bir ad var ise, 'git check-b < branch > --track < remote > /< branch > ' "(Git V.1.8.1.1).
      2013-02-27 09: 01: 33Z
    4. İhtiyacımız olan $git pull * < remote > /* - burada "*" bir joker karakterdir, bu nedenle henüz yerel sistem Bu nasıl yapılır? Sadece yerel sistemimize kod çekmek için her şubeyi kontrol etmemiz /çekmemiz gerekiyor mu?
      2017-02-19 05: 27: 35Z
    5. Bunun kesinlikle en iyi yorum olması gerekiyor.
      2019-03-27 13: 07: 22Z

    ile ilgili olarak,

      

    $git ödeme -b deneysel kökeni /deneysel

     
    $ git checkout -t origin/experimental
    

    veya daha ayrıntılı, ancak hatırlanması daha kolay

     
    $ git checkout --track origin/experimental
    
    Uzak bir havuzu izleme açısından

    daha iyi olabilir.

        
    92
    2013-07-09 05: 05: 08Z

    Yaptığınız getirinin, tüm uzak dalları alması gerekir, ancak bunlar, yerel dallar oluşturmaz. Gitk kullanıyorsanız, "uzaktan kumandalar /kökeni /dev" olarak tanımlanan uzak dalları veya benzer bir şey görmelisiniz.

    Uzak bir dalı temel alan yerel bir şube oluşturmak için aşağıdakileri yapın:

     
    git checkout -b dev refs/remotes/origin/dev

    Bunun gibi bir şey döndürmeli:

     
    Branch dev set up to track remote branch refs/remotes/origin/dev.
    Switched to a new branch "dev"

    Şimdi, dev şubesindeyken "git pull", yerel dev'inizi uzak dev şubesiyle aynı noktaya güncelleyecektir. Tüm dalları alacağına dikkat edin, ancak yalnızca bulunduğunuz ağacı ağacın en üstüne çekin.

        
    79
    2008-09-15 22: 52: 51Z
    1. Burada refs /uzaktan kumandaya ihtiyacınız yok. git ödeme -b dev kaynak /dev iyi çalışacak.
      2008-09-17 13: 10: 34Z
    2. Bu her zaman işe yarar: git checkout -b newlocaldev --track origin/dev. Yerel şubenin uzak olanla aynı adı taşımasını istiyorsanız ve uzak olanın zor bir adı yoksa, -b newlocaldev'u atlayabilirsiniz. Varsayılan branch.autosetupmerge yapılandırma ayarıyla ve dev adında yerel bir dalınız olmadığını varsayarak, bu iki komut aynı şeyi yapabilir: git checkout -b dev origin/dev ve yalnızca git checkout dev düz. Sonunda, git checkout origin/dev yeni bir branc oluşturmuyorh, fakat sadece sizi ayrılmış HEAD durumuna sokuyor.
      2012-07-03 13: 27: 25Z
    3. Uzaktan kumanda artık mevcut değilken Git silindiğini kabul edemeyecek kadar aptalsa ne olur? Bu, güncellendiğinizi varsayar ve git branch -a uzak bir şube olarak listelemeye devam eder.
      2016-09-19 22: 14: 42Z
    4. Ve bunu onlarca şubeye mi yapıyoruz?
      2017-02-19 05: 28: 33Z

    "git clone git: //location" yaptığınızda, tüm dallar ve etiketler alınır.

    Belirli bir uzak dalın üzerinde çalışmak için, kaynak kodun uzak olduğu varsayılarak:

     
    git checkout -b branch origin/branchname
    
        
    57
    2008-09-15 22: 47: 00Z
    1. "Tüm dallar ve etiketler getirildi" notunuzu takdir ediyorum. Cevabın yanlış olduğu konusunda yorum yapacaktım, ama sonra onu kontrol ettim ve buldum, tamamen haklısın. Yani, bir şekilde, en kısa cevabı verdiniz - klonladıysanız, zaten buna sahipsiniz. Güzel. Birisi eklemeye çalışabilir: uzaktaki şubelerin ne durumda olduğunu öğrenmek için $ git branch -a'u deneyin.
      2013-11-17 22: 39: 47Z
    2. Gönderdiğim cevaba da bir göz atın. Uzak şubelerin çoğunda yerel olarak çalışmak isteyip istemediğinizi tek tek kontrol etmek zorunda kalmayacağınızı biliyorsanız, bu yardımcı olabilir.
      2018-12-08 15: 39: 56Z

    Diğer ad kullanın. Herhangi bir yerel Git tek-astarı olmamasına rağmen, kendinizinkini

    olarak tanımlayabilirsiniz.  
    git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
    

    ve sonra bunu

    olarak kullanın  
    git clone-branches
    
        
    51
    2013-06-16 13: 48: 27Z

    Neden sadece "usta" yı görüyorsunuz

    git clone tüm uzak uzak şubeleri indirir, ancak dosyalar yeni havuzunuzda bulunsa bile, onları hala "uzak" olarak görür. Bunun bir istisnası var; bu, klonlama işleminin "master" olarak adlandırılan uzak daldan "master" adında yerel bir dal oluşturmasıdır. Varsayılan olarak, git branch yalnızca yerel dalları gösterir, bu nedenle yalnızca "ana" bilgisini görürsünüz.

    git branch -a, uzak dallar dahil olmak üzere tüm dalları gösterir .


    Yerel şubeler nasıl alınır

    Gerçekten bir dal üzerinde çalışmak istiyorsanız, muhtemelen bunun “yerel” bir versiyonunu isteyeceksiniz. Uzak şubelerden yerel şubeler oluşturmak için (bunları kontrol etmeden ve böylece çalışma dizininizin içeriğini değiştirmeden) , böyle yapabilirsiniz:

     
    git branch branchone origin/branchone
    git branch branchtwo origin/branchtwo
    git branch branchthree origin/branchthree
    

    Bu örnekte, branchone, origin/branchone’a dayanarak oluşturduğunuz yerel bir şubenin adıdır; bunun yerine farklı adlarla yerel şubeler oluşturmak istiyorsanız, bunu yapabilirsiniz:

     
    git branch localbranchname origin/branchone
    

    Yerel bir şube oluşturduktan sonra, git branch ile görebilirsiniz (unutmayın, yerel şubeleri görmek için -a’a ihtiyacınız yoktur).

        
    45
    2014-03-05 13: 47: 03Z
    1. Neden yalnızca ustanın yalnızca görünen dal olduğunu açıkladığınız için teşekkür ederiz
      2018-03-28 11: 39: 22Z

    Bu çok karmaşık değil, çok basit ve yalındır adımlar aşağıdaki gibidir;

    git fetch origin Bu, tüm uzak dalları yerelinize getirecektir.

    git branch -a Bu, size tüm uzak şubeleri gösterecektir.

    git checkout --track origin/<branch you want to checkout>

    Aşağıdaki komutla istediğiniz dalda olup olmadığınızı doğrulayın;

     
    git branch
    

    Çıktı böyle olacak;

     
    *your current branch 
    some branch2
    some branch3 
    

    Geçerli dalı belirten * işaretine dikkat edin.

        
    44
    2016-06-09 05: 16: 42Z
    1. Teşekkürler suraj. Nedeni çok oylanmadığı için. Ve ans, sorgulayan tarafından kabul edilmez.
      2015-06-08 11: 03: 16Z
    2. "Git getirme orijini" uzak şubelerden hiçbirini yerel bölgeme getirmedi - ya da bir yere mi saklandılar? Yukarıdaki tüm cevapları okumak başımı ağrıttı. "Git tüm şubeleri yerel bölgelere getir" diyeceğiz. Bunu yapmak için bash betiklerinden ayrı bir yol olmalı.
      2016-05-02 06: 12: 17Z
    3. "Git getirme orijini" ni uyguladıktan hemen sonra, terminalinizdeki çıktısını gösterecektir - "* [new branch] branch_name - > origin /branch_name" , ancak "git branch" ı çalıştırdığınızda, bunun yerine sadece yerel şubelerinizi gösterecek, böylece tüm şubeleri görmek için "git branch -a" yapabilir ve ardından uzak şubeye geçmek için "git checkout -" - Çıkış kökeni /< Ödeme yapmak istediğiniz şube > " Bu yardımcı olur umarım. : -)
      2016-06-09 04: 24: 44Z
    4. Suraj, çünkü soru, nasıl "tüm uzak şubeleri klonlamak" idi - bir kerede manuel olarak nasıl güncelleneceğini değil. Asıl soruya cevap yok gibi görünüyor - çok fazla şubeniz varsa bir sürü yazmanın yolu.
      2017-02-19 07: 38: 59Z

    Hiç olmadığı kadar iyi geç, ancak işte bunu yapmanın en iyi yolu:

     
    mkdir repo
    cd repo
    git clone --bare path/to/repo.git .git
    git config --unset core.bare
    git reset --hard
    

    Bu noktada, tüm şubeleriyle birlikte uzak deponun tam bir kopyasına sahipsiniz (git branch ile doğrulayın). Uzak repo'nuzun uzaktan kumandası varsa, --mirror yerine --bare kullanabilirsiniz.

        
    44
    2017-05-11 21: 08: 28Z
    1. Buradaki düzenlemeler sırasında bir şeyler ters gitti. Şimdi bu cevap mantıklı değil. Son cümlede belirtilen "--bare", verilen komut listesinde mevcut değil.
      2014-03-05 13: 11: 15Z
    2. aşağıdaki Dave'in cevabını alarak. 'Git config unset core.bare' yerine 'git config --bool core.bare false' kullanmak işi yapıyor gibi görünüyor.
      2014-10-28 12: 25: 07Z
    3. Ben error: key does not contain a section: unset'um var. Dave'in cevabı daha iyi sonuç veriyor.
      2015-10-19 09: 24: 01Z
    4. Aslında git config --unset core.bare ... Bana göre bu, cevapların içinde sunulanların en temiz çözümü gibi görünüyor. Yazık ki çok az oy aldı ...
      2017-05-10 08: 05: 14Z
    5. Thanks @ChrisSim git config --bool core.bare false için katılıyorum. Bu yüzden bunun yerine Dave'in cevabını öneriyorum. Dave'in cevabı hakkında ne düşünüyorsunuz? Şerefe
      2017-06-29 08: 24: 32Z

    Sadece şunu yap:

     
    $ git clone git://example.com/myproject
    $ cd myproject
    $ git checkout branchxyz
    Branch branchxyz set up to track remote branch branchxyz from origin.
    Switched to a new branch 'branchxyz'
    $ git pull
    Already up-to-date.
    $ git branch
    * branchxyz
      master
    $ git branch -a
    * branchxyz
      master
      remotes/origin/HEAD -> origin/master
      remotes/origin/branchxyz
      remotes/origin/branch123
    

    Görüyorsunuz, 'git clone git: //example.com/myprojectt' herşeyi alıyor, hatta şubeleri bile kontrol etmelisin, onları kontrol etmelisin, sonra yerel şuben yaratılacak.     

    38
    2013-05-06 16: 22: 17Z

    Tüm şubeleri almak için yalnızca "git clone" kullanmanız gerekir.

     
    git clone <your_http_url>
    

    Yalnızca ana dalı görseniz bile, tüm dalları görmek için "git branch -a" kullanabilirsiniz.

     
    git branch -a
    

    Ve sahip olduğunuz herhangi bir şubeye geçebilirsiniz.

     
    git checkout <your_branch_name>
    

    "Git klonu" ndan sonra, uzaktan kumandaya bağlanmanız gerekmediğinden endişelenmeyin, wifi gittiğinizde "git branch-a" ve "git checkout" başarıyla çalıştırılabilir. Bu nedenle, "git clone" yaptığınızda, tüm şubeleri uzaktaki depodan kopyaladığını kanıtladı. Ondan sonra, uzak depoya ihtiyacınız yoktur, yerelinizde şubelerin kodları zaten vardır.

        
    23
    2014-11-19 15: 43: 04Z
    1. Burada çok net bir yanıt. Birçok insan bu konuyla ilgili kafa karıştı.
      2018-10-20 23: 12: 21Z
    2. İfadenizi "wifi'nızı kapattığınızda başarıyla çalıştırılabilir" ifadesini ikinci olarak kullanmak istiyorum. "git clone" gerçekten tüm dalları içeren bir repo ile sonuçlanır.
      2019-02-28 13: 32: 58Z

    Bir deponun tamamını kopyalamak için bir git clone'un olması gerekiyordu. Klonlamayı deneyin ve ardından git branch -a'u çalıştırın. Bütün dalları listelemeli. Eğer "master" yerine "foo" dalına geçmek istiyorsanız, git checkout foo'u kullanın.

        
    20
    2017-10-28 15: 33: 56Z
    1. Git komutlarını tire ile veya tire işareti olmadan çalıştırabilirsiniz. Hem "git-branch" hem de "git branch" çalışacak.
      2008-09-15 22: 55: 19Z
    2. Belki de bu cevap git çok çalıştığında uzun zaman önce verildi, ama bugün yanıltıcı olduğunu düşünüyorum. git clone uzaktaki tüm şubeleri indirir, ancak yalnızca yerel bir ana dalı oluşturur. git branch yalnızca yerel şubeleri gösterdiğinden, uzak şubeleri de görmek için git branch -a’a ihtiyacınız vardır.
      2014-03-05 13: 05: 12Z
    3. Teşekkürler. Bu tür garip bir varsayılan davranış IMO. Ben sadece onu daha şifreli bir tutukluluk haline getireceğim. Dalları indirdiyse, git şubesini çağırırken neden onları gizlesin?
      2016-10-26 14: 27: 51Z
    4. @ Cerran, teşekkürler; Cevabımı buna göre güncelledim.
      2017-10-28 15: 34: 38Z
    5. "tüm uzak dalları indirir, ancak yalnızca yerel bir ana dalı yapar". Bunu anlamak için yardıma ihtiyacım var. Git klonu master dışında herhangi bir klonu DEĞİLDİR, "git şube -a" yaptığınız gibi "gelişme" dalının sadece "uzaktan /kaynak /gelişme" de olduğunu gösterir. Bu, yerel olarak herhangi bir yerde bu şubeye sahip olmadığınızı, sadece şu anda başlangıçta var olduğunu söylüyor olmalı?
      2018-01-23 10: 47: 40Z

    Aracımı kullanın git_remote_branch ( makinenizde Ruby yüklü olması gerekir). Uzak dal manipülasyonlarının kolayca ölü hale getirilmesi için özel olarak tasarlanmıştır.

    Sizin adınıza bir işlem yaptığında, konsolda kırmızı renkte yazdırır. Zamanla, sonunda beynine sadık kalıyorlardı :-)

    Grb'nin sizin adınıza komut çalıştırmasını istemiyorsanız, sadece'açıkla' özelliği. Komutlar, sizin için yürütülmek yerine konsolunuza yazdırılacaktır.

    Son olarak, ezberlemeyi kolaylaştırmak için tüm komutların diğer adları vardır.

    Bunun alpha yazılımı olduğunu not edin ;-)

    grb yardımını çalıştırdığınızda yardım İşte:

     
    git_remote_branch version 0.2.6
    
      Usage:
    
      grb create branch_name [origin_server] 
    
      grb publish branch_name [origin_server] 
    
      grb rename branch_name [origin_server] 
    
      grb delete branch_name [origin_server] 
    
      grb track branch_name [origin_server] 
    
    
    
      Notes:
      - If origin_server is not specified, the name 'origin' is assumed 
        (git's default)
      - The rename functionality renames the current branch
    
      The explain meta-command: you can also prepend any command with the 
    keyword 'explain'. Instead of executing the command, git_remote_branch 
    will simply output the list of commands you need to run to accomplish 
    that goal.
    
      Example: 
        grb explain create
        grb explain create my_branch github
    
      All commands also have aliases:
      create: create, new
      delete: delete, destroy, kill, remove, rm
      publish: publish, remotize
      rename: rename, rn, mv, move
      track: track, follow, grab, fetch
    
        
    19
    2008-09-20 13: 53: 58Z
    1. Kelime bilge: Bu proje, bu cevabın yayınlandığı süre zarfında terk edilmiş gibi görünüyor. 2008'den sonra herhangi bir güncelleme bulamıyorum. Vurguncu emptor ve tüm bunlar. Eğer hatalıysam, birisinin güncel bir gösterici sunacağını ve sağlayacağını umuyorum, çünkü böyle bir araca sahip olmayı çok isterdim.
      2011-04-27 21: 53: 31Z
    2. @ bradheintz, bu cevabı kontrol edin, bir git diğer adı oluşturur: stackoverflow. com /a /16563327/151841
      2019-04-19 15: 06: 15Z

    Burada gördüğüm tüm cevaplar geçerlidir, ancak bir havuzu klonlamanın ve tüm dalları aynı anda çekmenin daha temiz bir yolu vardır.

    Bir havuzu klonladığınızda şubelerin tüm bilgileri gerçekten indirilir ancak şubeler gizlenir.

    komutu ile  
    $ git branch -a
    

    deponun tüm dallarını ve komutunu kullanarak gösterebilirsiniz

     
    $ git checkout -b branchname origin/branchname
    

    daha sonra bir kerede manuel olarak "indirebilirsiniz".


    Bununla birlikte, çok sayıda şubesi olan bir repo klonlamak istediğinizde, yukarıda gösterilen tüm yollar yukarıda gösterildiği gibi, biraz karmaşık olsa da göstereceğim çok daha temiz ve daha hızlı bir şekilde uzun ve sıkıcıdır. Bunu gerçekleştirmek için üç adıma ihtiyacınız var:

    1. İlk adım

    makinenizde yeni bir boş klasör oluşturun ve .git klasörünün bir ayna kopyasını depodan klonlayın:

     
    $ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
    $ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
    

    my_repo_folder klasörü içindeki yerel depo hala boştur, şimdi terminalden bir "ls -alt" komutu ile görebileceğiniz gizli bir .git klasörü var.

    1. İkinci adım

    Git deposundaki "bare" boolean değerini false olarak değiştirerek bu depoyu boş (çıplak) bir depodan normal bir depoya geçirin:

     
    $ git config --bool core.bare false
    
    1. Üçüncü Adım

    Geçerli klasörün içindeki her şeyi alın ve yerel makinedeki tüm dalları oluşturun, bu nedenle bunu normal bir depo haline getirir.

     
    $ git reset --hard
    

    Artık sadece "git branch" komutunu yazıp tüm dalların indirildiğini görebilirsiniz.

    Bu, tüm şubelerle aynı anda git deposunu klonlayabileceğiniz hızlı yoldur, ancak bu şekilde her proje için yapmak istediğiniz bir şey değildir.

        
    16
    2015-12-06 20: 08: 41Z
    1. ... içinde "download" kelimesini kullanmanızdan hoşlanmıyorum ... "download" kelimelerini bir kerede manuel olarak tek tek . Aslında tüm bilgiler, repo klonlandıktan sonra zaten indirilmiş durumda. Birinin yapması gereken tek şey, yerel izleme dalları oluşturmaktır (bu, çevrimdışı olduğunda da mümkündür; bu, tüm bilgilerin depoda olduğunu kanıtlar).
      2019-02-28 13: 35: 45Z
    2. @ bvgheluwe bu yüzden tırnak içindedir.
      2019-03-05 16: 21: 10Z

    Tamam, deponuzu klonladığınızda, tüm şubeleriniz orada ...

    Yalnızca git branch'u yaparsanız, bunlar gizlidir ...

    Yani tüm dalların adını görmek istiyorsanız, bunun gibi --all bayrağı eklemeniz yeterlidir:

    git branch --all veya git branch -a

    Sadece şubeye ödeme yaparsanız, ihtiyacınız olan her şeyi alırsınız.

    Peki ya siz klonladıktan sonra başka birisinin oluşturduğu şube?

    bu durumda, sadece yapın:

    git fetch

    ve tüm şubeleri tekrar kontrol et ...

    Aynı anda hem almak hem de satın almak isterseniz, şunları yapabilirsiniz:

    git fetch && git checkout your_branch_name

    Söylediklerimi basitleştirmeniz için aşağıdaki resmi de oluşturduk:

     git şube - tüm şubeleri alabilmem

        
    13
    2018-03-23 ​​04: 05: 47Z
    1. "Sahip oldunuz" ile "görüyorsunuz" arasında bir fark var. git branch - all, uzak havuzunu kaldırdığınızda uzak şubeleri artık listelemez.
      2018-03-01 11: 23: 34Z

    Sorunun cevaplarından birine baktığımda, onu kısaltmanın mümkün olduğunu farkettim:

     
    for branch in  `git branch -r | grep -v 'HEAD\|master'`; do  
     git branch --track ${branch##*/} $branch;
    done
    

    Ancak, uzaktaki dallardan birinin örn. admin_master indirilmeyecek!

    Orijinal fikir için bigfish'e teşekkürler

        
    12
    2015-02-19 21: 33: 08Z
    1. Regex'i iyileştirebilir veya yanlış pozitiflerden kaçınmak için filtreyi iyileştirmek için grep yerine Awk kullanabilirsiniz.
      2015-11-04 12: 37: 08Z
    2. tüm şubeler kesinlikle istediğim şey değil, "orijinli \my_branch_name" dir.
      2016-09-01 17: 49: 46Z
    3. Daha önce ${branch ## * /} yapıyı görmedim - gerçekten yararlı görünüyor - bunun hakkında daha fazla bilgi edinebileceğim bir fikir? Hiçbir yerde bash altında bulamıyorum. Thx.
      2017-05-07 11: 44: 06Z
     
    #!/bin/bash
    for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
       git branch --track ${branch#remotes/origin/} $branch
    done
    

    Bu kod tüm uzak dallar kodunu yerel depoya çeker.

        
    12
    2016-12-11 02: 20: 42Z
    1. 2017-04-15 15: 13: 49Z

    Yerel bir depodan klonlamak git clone & git fetch: birçok dal /etiket dokunulmadan kalacaktır.

    Tüm dallara ve etiketlere sahip bir klon elde etmek için.

     
    git clone --mirror git://example.com/myproject myproject-local-bare-repo.git
    

    Tüm dallar ve etiketlerle birlikte çalışan bir kopya ile klon almak için:

     
    git clone --mirror git://example.com/myproject myproject/.git
    cd myproject
    git config --unset core.bare
    git config receive.denyCurrentBranch updateInstead
    git checkout master
    
        
    12
    2017-02-23 23: 55: 10Z

    Kopyala yapıştır komut satırına yapıştırın:

     
    git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master
    

    Daha fazla okunabilirlik için:

     
    git checkout master ;
    remote=origin ;
    for brname in `
        git branch -r | grep $remote | grep -v master | grep -v HEAD 
        | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
    `; do
        git branch -D $brname ;
        git checkout -b $brname $remote/$brname ;
    done ;
    git checkout master
    


    Bu irade:
    1. ustayı kontrol et (bulunduğumuz şubeyi silebilmemiz için)
    2. Ödeme yapmak için uzaktan kumandayı seçin (sahip olduğunuz uzaktan kumandayı değiştirin)
    3. Master ve HEAD dışındaki uzaktan kumandanın tüm şubelerinde dolaşın
      1. yerel şubeyi silin (zorla güncellenen şubeleri kontrol edebilmemiz için)
      2. uzaktan kumandadan çıkış yap şubesi
    4. ustayı kontrol edin (bunun uğruna)

    yanıtına dayanarak /VonC "> VonC .

        
    10
    2017-05-23 11: 47: 33Z

    Aynısını yapmam gerekiyordu. İşte Ruby komut dosyası.

     
    #!/usr/bin/env ruby
    
    local = []
    remote = {}
    
    # Prepare
    %x[git reset --hard HEAD]
    %x[git checkout master] # Makes sure that * is on master.
    %x[git branch -a].each_line do |line|
      line.strip!
      if /origin\//.match(line)
         remote[line.gsub(/origin\//, '')] = line
       else
         local << line
       end
    end
    # Update 
    remote.each_pair do |loc, rem|
      next if local.include?(loc)
      %x[git checkout --track -b #{loc} #{rem}]
    end
    %x[git fetch]
    
        
    8
    2013-06-16 13: 45: 57Z
    1. Bu betiği çalıştırmak zorunda kalmaktan kaçınmak için aşağıya gönderdiğim yanıtı görün.
      2018-12-08 15: 41: 48Z

    Bu küçük Powershell işlevini, menşei uzaktaki tüm git şubelerimi kontrol edebilmek için yazdım.

     
    Function git-GetAllRemoteBranches {
         iex "git branch -r"                       <# get all remote branches #> `
         | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
         | % { Out-Null; $matches['name'] }        <# write does names #>
    }
    
    
    Function git-CheckoutAllBranches {
        git-GetAllRemoteBranches `
            | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
    }
    

    Git ayarlarımda daha fazla git işlevi bulunabilir. repo

        
    8
    2016-06-19 10: 54: 23Z

    Git genellikle (belirtilmediğinde), tüm dalları ve /veya etiketleri (refs, bkz: git ls-refs), geçmişlerini tamamlamak için gerekli nesnelerle birlikte bir veya daha fazla depodan alır. Başka bir deyişle, indirilmiş olan nesneler tarafından erişilebilen nesneleri getirir. Bakınız: git fetch gerçekten ne yapıyor?

    Bazen, geçerli olanla doğrudan bağlantısı olmayan dallar /etiketleriniz olabilir, bu nedenle git pull --all/git fetch --all bu durumda yardımcı olmaz, ancak bunları şöyle sıralayabilirsiniz:

     
    git ls-remote -h -t origin
    

    ve ref adlarını bilerek bunları manuel olarak alın.

    Yani, hepsini almak için , deneyin:

     
    git fetch origin --depth=10000 $(git ls-remote -h -t origin)
    

    --depth=10000 parametresi, havuzu sığarsanız yardımcı olabilir.

    Ardından tüm şubelerinizi tekrar kontrol edin:

     
    git branch -avv
    

    Yukarıdakiler yardımcı olmazsa, izlenen listesine manuel olarak eksik dallar eklemeniz gerekir (bir şekilde kayboldukları için):

     
    $ git remote -v show origin
    ...
      Remote branches:
        master      tracked
    

    git remote set-branches beğenme:

     
    git remote set-branches --add origin missing_branch
    

    bu nedenle, alındıktan sonra remotes/origin’un altında görünebilir:

     
    $ git remote -v show origin
    ...
      Remote branches:
        missing_branch new (next fetch will store in remotes/origin)
    $ git fetch
    From github.com:Foo/Bar
     * [new branch]      missing_branch -> origin/missing_branch
    

    Sorun giderme

    Ana daldan başka bir şey hala alamıyorsanız, aşağıdakileri kontrol edin:

    • Uzaktan kumandalarınızı (git remote -v) iki kez kontrol edin, örn.
      • git config branch.master.remote’un origin olduğunu doğrulayın.
      • origin’un şu URL’den doğru URL’yi gösterip göstermediğini kontrol edin: git remote show origin (bkz. bu gönderi ).
    7
    2017-05-23 12: 26: 29Z

    Bu yanıtların hiçbiri, kullanıcı kimsenin doğru yolda olmadığı durumlar dışında kesinti.

    Bir repoyu bir sunucudan /sistemden diğerine taşımakla ilgili sorun yaşıyordum. Repoyu klonladığımda, yalnızca master için yerel bir şube oluşturdu, bu yüzden yeni uzaktan kumandaya bastığımda, yalnızca master dalı itildi.

    Bu yüzden bu iki yöntemi ÇOK faydalı buldum. Umarım başka birine yardım ederler.

    Yöntem 1:

     
    git clone --mirror OLD_REPO_URL
    cd new-cloned-project
    mkdir .git
    mv * .git
    git config --local --bool core.bare false
    git reset --hard HEAD
    git remote add newrepo NEW_REPO_URL
    git push --all newrepo
    git push --tags newrepo
    

    Yöntem 2:

     
    git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'
    git clone OLD_REPO_URL
    cd new-cloned-project
    git clone-branches
    git remote add newrepo NEW_REPO_URL
    git push --all newrepo
    git push --tags newrepo
    
        
    6
    2015-01-23 17: 51: 19Z
    1. Gerçekten yararlı teşekkürler !!
      2019-02-26 13: 13: 01Z

    Hatırlayabileceğiniz komutları kullan

    Atlassian'ın Depo Barındırma Hizmeti Bitbucket kullanıyorum. Bu yüzden doktorlarını takip etmeye çalışıyorum. Ve bu benim için mükemmel çalışıyor. Aşağıdaki kolay ve kısa komutlarlamote şubesi.

    İlk önce havuzunuzu kopyalayın, ardından hedef klasöre geçin. Ve sonuncusu, ancak en azından al ve al:  

    git clone <repo> <destination_folder>
    cd <destination_folder>
    git fetch && git checkout <branch>
    

    İşte bu. İşte bir litte daha gerçek dünya örneği:

     
    git clone https://username@bitbucket.org/team/repository.git project_folder
    cd project_folder
    git fetch && git checkout develop
    

    Komutlarla ilgili ayrıntılı bilgileri belgelerde bulabilirsiniz: Klonlama Komutu , Komut Al , Ödeme Komutanlığı

        
    6
    2016-03-11 20: 01: 06Z

    2017 yılı başından itibaren, bu yorumda yanıtı /a> çalışır:

    git fetch <origin-name> <branch-name> şubeyi sizin için indirdi. Bu, tüm şubeleri aynı anda çekmese de, bu dal başına tek tek uygulayabilirsiniz.

        
    6
    2017-05-23 12: 26: 29Z
    1. Bu, her şubeyi birer birer çekmenizi gerektirir. Çok fazla şubeniz varsa çok iyi değil.
      2018-12-08 15: 37: 24Z

    İşte başka bir kısa tek-liner komut tüm uzak şubeler için yerel şubeler oluşturur:

     
    (git branch -r | sed -n '/->/!s#^  origin/##p' && echo master) | xargs -L1 git checkout
    

    Yerel şubeleri izlemek zaten oluşturulmuşsa da düzgün çalışır. İlk git clone'dan sonra veya daha sonra istediğiniz zaman arayabilirsiniz.

    Klonlama işleminden sonra master şubeye göz atmanız gerekmiyorsa, kullanın

     
    git branch -r | sed -n '/->/!s#^  origin/##p'| xargs -L1 git checkout
    
        
    5
    2015-09-10 12: 04: 08Z

    Orijinal repo'daki git clone --mirror bunun için iyi çalışıyor.

     
    git clone --mirror /path/to/original.git
    git remote set-url origin /path/to/new-repo.git
    git push -u origin
    
        
    5
    2018-05-25 17: 34: 43Z
kaynak yerleştirildi İşte