Bagaimana cara mengambil hanya satu cabang dari repositori Git jarak jauh?

246

Saya ingin mengambil satu cabang (tidak semuanya) dari repositori jarak jauh dan membuat cabang pelacakan lokal yang dapat melacak pembaruan lebih lanjut ke cabang jarak jauh itu. Cabang-cabang lain di repositori jarak jauh sangat besar, jadi saya ingin menghindari mengambilnya. Bagaimana saya melakukan ini?

Sunting: Saya menemukan jawabannya sendiri tetapi StackOverflow menolak untuk membiarkan saya memberikan jawaban sebagai jawaban, jadi saya akan menaruhnya di sini di pertanyaan.

Anda menggunakan opsi -t untuk mendapatkan add jarak jauh, misalnya:

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

Anda dapat menggunakan beberapa -t branchopsi " " untuk mengambil banyak cabang.

mellis
sumber
3
Klon git mengambil seluruh repositori, termasuk semua cabang. Anda dapat membuat salinan dangkal, tetapi itu hanya memungkinkan Anda untuk menentukan jumlah revisi, bukan cabang mana.
Ikke
Tentu Anda bisa menjawab pertanyaan Anda sendiri, mengapa Anda tidak bisa?
CharlesB
2
Saya pikir OP berarti dia tidak bisa menjawabnya. StackOverflow menetapkan waktu minimum yang harus dilewati sebelum Anda dapat menjawab pertanyaan Anda sendiri.
Lars Nordin
1
Hai OP, mungkin menyenangkan sekarang untuk menambahkan jawaban Anda sekarang. Dengan cara ini kita dapat memberikan suara (dan membandingkan dengan jawaban lain)
lulalala
3
Perintah add git remote Anda menambahkan cabang jarak jauh, yang tidak ada hubungannya dengan mengambil cabang!
Chris Halcrow

Jawaban:

220
git fetch <remote_name> <branch_name>

Bekerja untukku.

Abdulsattar Mohammed
sumber
14
Baru tahu bahwa cabang yang diambil tersedia FETCH_HEADsetelah diambil . Terima kasih!
Christoph
4
kemudian git checkout FETCH_HEADuntuk checkout
d9k
Sederhana dan mudah.
gsumk
Bagaimana cara mendapatkan <remote_name>?
mrgloom
@ mrgloom dalam kebanyakan kasus remote_nameadalah origin. misal:git fetch origin <branch_name>
Saahithyan Vigneswaran
67

Salah satu caranya adalah sebagai berikut:

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

Ini tidak mengatur pelacakan.

Untuk informasi lebih lanjut, lihat dokumentasi git fetch .

EDIT : Seperti catatan @ user1338062 di bawah ini : jika Anda belum memiliki klon lokal repositori tempat Anda ingin menambahkan cabang baru, tetapi Anda ingin membuat repositori lokal baru, maka itu git clone --branch <branch_name> --single-branch <repo_url>memberikan solusi yang lebih pendek.

hcs42
sumber
1
Terima kasih ini melakukan apa yang diminta op. Untuk membuat pelacakan cabang git checkout -t <remote branch> / <branch name> <branch name>
ken
7
Jika saya hanya melakukannya git checkout <branchname>, saya melihat bahwa git secara otomatis mengatur cabang pelacakan, jika satu-satunya cabang dengan nama itu adalah cabang jarak jauh.
bukzor
1
ini adalah satu-satunya hal yang berhasil untuk saya. meskipun konfigurasi disetel untuk hanya mengambil ref untuk satu cabang, itu masih menarik ref untuk semua cabang menggunakan fetch atau pull. perintah ini hanya menarik cabang yang saya inginkan sehingga repo hanya 500kb bukan 5mb. Terima kasih.
herostwist
1
Jawaban ini mungkin sudah usang. git clonesekarang mendukung --branchdan --single-branchopsi, saya memposting jawaban dengan demonstrasi .
user1338062
3
@ user1338062 Ini masih berlaku jika Anda ingin mengambil cabang baru saja (tidak semua cabang menggunakan git fetch) setelah kloning
rubyprince
35

Saya tahu sudah ada banyak jawaban, tetapi ini adalah langkah-langkah yang berhasil bagi saya:

  1. git fetch <remote_name> <branch_name>
  2. git branch <branch_name> FETCH_HEAD
  3. git checkout <branch_name>

Ini didasarkan pada jawaban oleh @Abdulsattar Mohammed, komentar oleh @Christoph pada jawaban itu, dan pertanyaan-pertanyaan stack overflow lainnya dan jawaban mereka:

MrMadsen
sumber
1
Jawaban paling berguna di sini IMO
Daniel Holmes
31

Untuk memperbarui remote yang ada untuk melacak cabang tertentu, gunakan saja:

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

Dari 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.
Ikar Pohorský
sumber
1
Luar biasa, saya berada di --single-branchrepositori dan tidak dapat mengunduh cabang tambahan nanti. Terima kasih!
Yajo
22

Salah satu cara untuk melakukannya:

di .git / config fetch untuk repo jarak jauh harus diatur untuk mengambil cabang apa pun:

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

untuk mengambil cabang jarak jauh:

git fetch origin branch-name

untuk membuat cabang lokal 'nama-cabang' yang diatur untuk melacak 'cabang-nama' cabang jauh dari asal.

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

untuk mendaftar semua cabang

git branch -a
klode
sumber
16

Disalin dari pos penulis:

Gunakan -topsi untuk git remote add, misalnya:

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

Anda dapat menggunakan banyak -t branchopsi untuk mengambil banyak cabang.

astronaut
sumber
10
Diturunkan, mengapa Anda menjawab dengan jawaban yang ada di utas yang sama?
Bowen
13

Jika Anda ingin mengubah default untuk "git pull" dan "git fetch" menjadi hanya mengambil cabang tertentu maka Anda dapat mengedit .git / config sehingga konfigurasi jarak jauh terlihat seperti:

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

Ini hanya akan mengambil master dari asal secara default. Lihat untuk info lebih lanjut: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec

EDIT: Baru menyadari ini adalah hal yang sama dengan opsi -t untuk git remote add. Setidaknya ini adalah cara yang bagus untuk melakukannya setelah remote ditambahkan jika Anda tidak ingin menghapus remote dan menambahkannya lagi menggunakan -t.

Kolin
sumber
1
tautan progit.org/book/ch9-5 telah pindah ke git-scm.com/book/en/Git-Internals-The-Refspec
sini
8

Demi kelengkapan, berikut adalah contoh perintah untuk checkout baru:

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

Seperti yang disebutkan dalam jawaban lain, set remote.origin.fetchseperti ini:

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

versi git: 2.74

Beginilah cara saya melakukannya:

git remote add [REMOTE-NAME] [REMOTE-URL]
git fetch [REMOTE-NAME] -- [BRANCH]
scottalan
sumber
4

git versi 2.16.1.windows.4

Cukup melakukan git, mengambil remoteRepositoryName, branchName (eg: git fetch origin my_local_branch) sudah cukup. Pengambilan akan dilakukan dan cabang lokal baru akan dibuat dengan nama yang sama dan pelacakan akan diatur ke cabang jarak jauh.

Kemudian lakukan checkout checkout branchName

Karthikeyan Mohan
sumber
cabang tidak muncul di bawah git branchsampai Anda checkout ke dalamnya
commonpike
3

Solusi saya:

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

jika Anda tidak memiliki klon lokal:

git clone --depth 1 -b <branch_name> <repo_url>
liy
sumber
3
  1. Pilih <remote_name>yang ingin Anda gunakan (jangan ragu untuk menggunakan origin dan lewati langkah 1.)
  2. git remote add <remote_name> <remote_url>
  3. git fetch <remote_name> <branch>
  4. Pilih <your_local_branch_name>yang ingin Anda gunakan. Bisa sama dengan <branch>.
  5. git checkout <remote_name>/<branch> -b <your_local_branch_name>

Semoga itu bisa membantu!

Lukasz Czerwinski
sumber
1

Jawabannya sebenarnya tergantung pada daftar cabang pelacakan yang Anda miliki saat ini. Anda dapat mengambil cabang tertentu dari jarak jauh dengan git fetch <remote_name> <branch_name> hanya jika cabang sudah ada di daftar cabang pelacakan (Anda dapat memeriksanya dengan git branch -r).

Misalkan saya telah mengkloning remote dengan opsi --single-branch sebelumnya, dan dalam hal ini satu-satunya cabang pelacakan yang saya miliki adalah yang "dikloning". Saya sedikit bingung dengan menyarankan untuk mengubah konfigurasi git secara manual, serta dengan mengetik git remote add <remote_name> <remote_url>perintah. Ketika "git remote add" mengatur remote baru, itu jelas tidak bekerja dengan repositori jarak jauh yang ada; memasok opsi "-t branch" tidak membantu saya.

Jika remote ada, dan cabang yang ingin Anda ambil ada di remote itu:

  1. Periksa git branch -rapakah Anda dapat melihat cabang ini sebagai cabang pelacakan. Jika tidak (seperti dalam kasus saya dengan klon cabang tunggal), tambahkan cabang ini ke daftar cabang pelacakan dengan "git remote set-branch" dengan opsi --add:

    • git remote set-branches --add <remote_name> <branch_name>
  2. Sekarang Anda dapat mengambil cabang tertentu (duplikat di sini jawaban lain):

    • git fetch <remote_name> <branch_name>
  3. Dan buat dan checkout cabang lokal baru dengan "checkout --track", yang akan diberi "branch_name" yang sama dengan cabang pelacakan:

    • git checkout --track <remote_name>/<branch_name>
AlexK
sumber
0

Cara paling sederhana untuk melakukannya

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

Contoh: Saya ingin mengambil cabang uat dari asal dan beralih ke ini sebagai cabang saat ini.

   git fetch origin uat && git checkout uat
Amitesh
sumber