Uzak Git deposunun yalnızca bir dalını nasıl getirebilirim?


247

Uzak bir deponun tek bir dalını (tümünü değil) almak ve o uzak daldaki diğer güncellemeleri izleyebilecek bir yerel izleme dalı oluşturmak istiyorum. Uzak depodaki diğer dallar çok büyük, bu yüzden onları almaktan kaçınmak istiyorum. Bunu nasıl yaparım?

Düzenleme: Bunu kendim anladım ama StackOverflow cevap yerine bir cevap olarak bana izin vermeyi reddeder, bu yüzden burada yerine soru yerine koyacağım.

Uzak ekleme eklemek için -t seçeneğini kullanırsınız, örneğin:

git remote add -t remote-branch remote-name remote-url

Birden -t branchçok dalı kapmak için birden çok " " seçeneğini kullanabilirsiniz.


3
Git klonu, tüm dallar da dahil olmak üzere tüm havuzu getirir. Sığ kopyalar yapabilirsiniz, ancak bu, hangi dalları değil, yalnızca düzeltme sayısını belirtmenize izin verir.
Ikke

Elbette kendi sorunuzu cevaplayabilirsiniz, neden yapamıyorsunuz?
CharlesB

2
Bence OP cevap veremedi demekti. StackOverflow, kendi sorunuzu cevaplayabilmeniz için geçmesi gereken minimum süreyi belirler.
Lars Nordin

1
Merhaba OP, şimdi cevabınızı eklemek güzel olabilir. Bu şekilde oy verebiliriz (ve diğer yanıtlarla karşılaştırırız)
lulalala

3
Git remote add komutunuz, bir dal getirmeyle ilgisi olmayan uzak bir dal eklemektir!
Chris Halcrow

Yanıtlar:


220
git fetch <remote_name> <branch_name>

Benim için çalıştı.


14
Alınan dalın getirildikten FETCH_HEADsonra kullanılabilir olduğunu öğrendim . Teşekkürler!
Christoph

4
sonra git checkout FETCH_HEADödeme için
d9k

Basit ve kolay.
gsumk

<Uzaktan_adı> nasıl alınır?
mrgloom

çoğu durumda @mrgloom remote_nameolduğunu origin. örneğin:git fetch origin <branch_name>
Saahithyan Vigneswaran

67

Bunun bir yolu şudur:

git fetch <remotename> <remote branch>:refs/remotes/<remotename>/<local branch>

Bu izlemeyi kurmaz.

Daha fazla bilgi için git getirme belgelerine bakın .

DÜZENLEME : @ @ user1338062 notları aşağıdaki gibi : Yeni dalı eklemek istediğiniz deponun yerel bir klonuna sahip değilseniz, ancak yeni bir yerel depo oluşturmak istiyorsanız, daha git clone --branch <branch_name> --single-branch <repo_url>kısa bir çözüm sağlar.


1
Teşekkürler bu op istedi ne yapar. Bir izleme dalı yapmak için git checkout -t <uzak şube> / <şube adı> <şube adı>
ken

7
Eğer basitçe yaparsam git checkout <branchname>, git, bu adı taşıyan tek dal uzak dalsa, izleme dalını otomatik olarak ayarladığını görüyorum.
bukzor

1
benim için işe yarayan tek şey buydu. Yapılandırma sadece tek bir dal için refs getirecek şekilde ayarlanmış olsa da, yine de fet veya pull kullanarak tüm şubelere refs çekti. bu komut repo sadece 500kb değil 5mb oldu istedim sadece şube çekti. Teşekkürler.
herostwist

1
Bu cevap muhtemelen eski. git cloneşimdi destekler --branchve --single-branchseçenekler, ben gösteri ile bir cevap yayınladı .
user1338062

3
@ user1338062 Klonlamadan sonra yalnızca yeni bir şube almak istiyorsanız (git fetch kullanan tüm dalları değil) bu geçerli
rubyprince


31

Mevcut uzaktan kumandayı yalnızca belirli dalları izlemek üzere güncellemek için şunu kullanın:

git remote set-branches <remote-name> <branch-name>

Gönderen git help remote:

set-branches
    Changes the list of branches tracked by the named remote. This can be used to track a subset of the available remote branches
    after the initial setup for a remote.

    The named branches will be interpreted as if specified with the -t option on the git remote add command line.

    With --add, instead of replacing the list of currently tracked branches, adds to that list.

1
Şaşırtıcı, bir --single-branchdepodaydım ve daha sonra ek şubeler indiremedim. Teşekkürler!
Yajo

22

Bunu yapmanın bir yolu:

uzak repo için .git / config getirme herhangi bir dalı getirecek şekilde ayarlanmalıdır:

   [remote "origin"]
            fetch = +refs/heads/*:refs/remotes/origin/*

uzak dalı getirmek için:

git fetch origin branch-name

'şube-adı' uzak dalını başlangıç ​​noktasından izlemek üzere ayarlanmış bir yerel şube 'şube-adı' oluşturmak için.

git checkout -b branch-name origin/branch-name

tüm şubeleri listelemek

git branch -a

16

Yazarın gönderisinden kopyalandı:

Şu -tseçeneği kullanın git remote add:

git remote add -t remote-branch remote-name remote-url

Birden -t branchçok dalı kapmak için birden çok seçenek kullanabilirsiniz .


10
Aşağı oy verildi, neden aynı mesaj dizisindeki mevcut bir cevapla cevap veriyorsunuz?
Bowen

13

"Git pull" ve "git fetch" için varsayılanı yalnızca belirli dalları getirecek şekilde değiştirmek istiyorsanız, uzak yapılandırmanın aşağıdaki gibi görünmesi için .git / config dosyasını düzenleyebilirsiniz:

[remote "origin"]
  fetch = +refs/heads/master:refs/remotes/origin/master

Bu, master'ı yalnızca varsayılan olarak başlangıç ​​noktasından alır. Daha fazla bilgi için bakın: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

EDIT: Bu sadece -t seçeneği git remote add için yaptığı ile aynı şey olduğunu fark etti. En azından bu uzaktan kumandayı silmek ve -t kullanarak tekrar eklemek istemiyorsanız, uzaktan eklendikten sonra bunu yapmanın güzel bir yoludur.


1
progit.org/book/ch9-5 bağlantısı git-scm.com/book/en/Git-Internals-The-Refspec adresine taşındı
burada

8

Tamlık uğruna, yeni bir ödeme için örnek bir komut şöyledir:

git clone --branch gh-pages --single-branch git://github.com/user/repo

Diğer cevaplarda belirtildiği remote.origin.fetchgibi , şu şekilde ayarlanır :

[remote "origin"]
        url = git://github.com/user/repo
        fetch = +refs/heads/gh-pages:refs/remotes/origin/gh-pages

5

git sürümü: 2.74

Bunu nasıl yaparım:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]

4

git sürüm 2.16.1.windows.4

Bir git getirme uzak yapmak sadeceRepositoryName branchName(eg: git fetch origin my_local_branch) yeterlidir. Getirme işlemi yapılacak ve aynı ada sahip yeni bir yerel şube oluşturulacak ve izleme uzak şubeye ayarlanacaktır.

Sonra git checkout branchName gerçekleştirin


1
şube, git branchsiz ödeme yapmadığınız sürece altında görünmez
commonpike

3

Geçici çözümlerim:

git fetch --depth=1
git checkout <branch_name>

yerel bir klonunuz yoksa:

git clone --depth 1 -b <branch_name> <repo_url>

3
  1. Kullanmak istediğiniz herhangi birini seçin <remote_name>(kullanmaktan çekinmeyin origin ve 1. adımı atlayın.)
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. Kullanmak istediğiniz herhangi birini seçin <your_local_branch_name>. İle aynı olabilir <branch>.
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

Umarım yardımcı olur!


2

Cevap aslında şu anda sahip olduğunuz izleme kolu listesine bağlıdır. git fetch <remote_name> <branch_name> Yalnızca şube zaten izleme dalı listesindeyse (ile kontrol edebilirsiniz git branch -r) belirli bir dalı uzaktan kumandadan getirebilirsiniz .

Uzaktan kumandayı daha önce --single-branch seçeneği ile klonladığımı ve bu durumda sahip olduğum tek izleme dalının "klonlanmış" olduğunu varsayalım. Git git remote add <remote_name> <remote_url>komutunu elle ayarlamayı ve komutları yazmayı tavsiye ederek biraz şaşkınım . "Git remote add" yeni bir uzaktan kumanda kurduğu için, mevcut uzaktan depo ile çalışmadığı açıktır; "-t branch" seçenekleri sağlamak bana yardımcı olmadı.

Uzaktan kumanda mevcutsa ve getirmek istediğiniz dal bu uzaktan kumandada mevcutsa:

  1. git branch -rBu dalı izleme dalı olarak görüp göremediğinizi kontrol edin . Değilse (benim durumumda tek dallı bir klonla olduğu gibi), bu dalı --add seçeneği ile "git remote set-branch" ile izleme dalı listesine ekleyin:

    • git remote set-branches --add <remote_name> <branch_name>
  2. Şimdi belirli bir dalı getirebilirsiniz (burada diğer cevapları çoğaltın):

    • git fetch <remote_name> <branch_name>
  3. Ve "checkout --track" ile yeni bir yerel şube oluşturun ve ödeme yapın; bu şube, bir izleme dalıyla aynı "şube_adı" olarak verilir:

    • git checkout --track <remote_name>/<branch_name>

0

Bunu yapmanın en basit yolu

  git fetch origin <branch> && git checkout <branch>

Örnek: uat dalını başlangıç ​​noktasından almak ve geçerli çalışma dalı olarak buna geçmek istiyorum.

   git fetch origin uat && git checkout uat
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.