Tek dallı bir klonu nasıl "geri alırım"?


104

Depoyu kullanarak bir depoyu klonladım

git clone -b <branch name> --single-branch <github url> <target directory>

Bu YALNIZCA bu dalı klonladı, ancak şimdi ana ve diğer dallara geçmek istiyorum. Tek dal tercihini geri alabilmem için onu temizlemekten ve reponun geri kalanını klonlamaya başlamaktan başka bir yolu var mı?

Yanıtlar:


149

Git'e tüm dalları şu şekilde çekmesini söyleyebilirsiniz:

git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

İçeri bakarsanız .git/config, şuna benzer bir şeye bakar:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = false
[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master
[branch "master"]
    remote = origin
    merge = refs/heads/master
    rebase = true

Bunu tam bir klonla karşılaştırdım ve tek farkın "getirme" olduğunu gördüm [remote "origin"] .

Not: Git 1.8.2 sürümünü çalıştırıyorum. Git'in daha eski bir sürümünü çalıştırıyorsanız yapılandırma seçenekleri değişmiş olabilir. Komutlarım işe yaramazsa, .git/configbenzer bir şey görüp göremediğinize bakmanızı öneririm .


2
Sadece size özel bir teşekkür etmek istedim çünkü çok fazla kitap okudum ve googling yaptım ve böyle bir şeye rastlayamadım.
danieltalsky

2
Yardımcı olduğuma sevindim. gitEğer (depo nasıl yerleştirildiğine temelde anladıktan sonra onunla şeyler bir sürü yapabilirsiniz böylece komut satırı aracı, (aslında, komutların çoğu diğer komutları açısından uygulanır) inanılmaz güçlüdür .gitklasör işleri ).
sarahhodne

Bu benim için işe yaramadı - bu komutları çalıştırdıktan sonra git show-ref tagshala başarısız oluyor.
felixfbecker

1
Bu çözümün, bir dal aşağıdaki sözdizimi kullanılarak sığ klonlanmışsa da işe yarayacağına dikkat edin, bu da OP tarafından tanımlanan aynı eksikliğe git clone --depth=1 --branch branchname git@github.com:foobar/repo.git destinationpath
maruz kalır

1
Vay canına, bu sezgisel olmaktan uzak! Garip, Git'in bunu başaracak bir komuta sahip olmaması. Evet, çalıştırdım ... ve şimdi yapılandırma dosyası int o .git dizinini de biliyorum!
kashiraja

62

Tek bir şube eklemek istiyorsanız, aşağıdakileri yapabilirsiniz:

git remote set-branches --add origin [remote-branch]
git fetch origin [remote-branch]:[local-branch]

Git sürüm 1.9.1 ile çalışır


1
Sana aşığım
user1760150

4
Bu fetch =, .git / config'e birden çok satır ekler , uzaktan kumandadaki iki dal arasında geçiş yapmak istediğinizde ancak bir grup diğer dalı almak istemediğinizde çok kullanışlıdır. Teşekkürler!
Terry Brown

5

Kullanılarak klonlanmış yerel depoma başka bir uzak dal eklemek--single-branch için, aşağıdakiler benim için çalışır:

git remote set-branches --add origin [remote-branch]
git fetch
git checkout [remote-branch]

[remote-branch]Örneğin, joker karakterleri de kullanabilirsiniz.

git remote set-branches --add origin release-1.*
git fetch
git checkout release-1.5

Bu, git sürüm 2.21.1 kullanılarak çalışır . git fetch origin [remote-branch]:[local-branch]İzlenmemiş bir durumda yerel şubeyi oluşturduğundan, yapılmamasını öneren diğer yanıtlar işe yaramadı. Çalıştırırken git pullilk olarak uzak şubenin tüm işlemlerini yerel şubemle birleştirmeyi denedi.


2
ikinci kez bu cevaba geri dönüyorum. çok kullanışlı. Teşekkürler!
07:18

1
En kullanışlı cevap
Denis Itskovich

1

Sadece orijinal depoyu yeni bir uzaktan kumanda olarak ekleyin ve oradan mı çalışın?

git remote add path/to/myrepo myNewOrigin
git fetch myNewOrigin

Hatta isterseniz mevcut 'kaynak' uzak uzaklığınızı silebilir ve 'myNewOrigin'i' kökeni 'olarak yeniden adlandırabilirsiniz.

Oradan çekebilir / birleştirebilir / yeniden düzenleyebilirsiniz.


0

.git/configYerel deponuzun dosyasını değiştirin fetch.[remote origin] section .

Böyle bir şeyden önce

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/master:refs/remotes/origin/master

Sonra öyle olacak

[remote "origin"]
    url = https://github.com/owner/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

0

Başlangıçta Dominik Pawlak'ın cevabını uyguladım ve işe yaradı. Ancak yeni şubeme daha fazla kod ekledikten sonra daha fazla değişiklik yapamadım.

single-branchTamamen sıfırlamanın başka bir yolu var, burada bahsedilmemiştir:

git remote remove origin
git remote add origin git@gitlab.com:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

Bu, her şeyi orijinaline sıfırlar.


0

Benim için çalıştı:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
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.