Bagaimana cara “membatalkan” klon --satu-cabang?

102

Saya mengkloning repo menggunakan

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

Kloning ini HANYA cabang ini, tetapi sekarang saya ingin beralih ke master dan cabang lainnya. Apakah ada cara lain selain membersihkannya dan memulai kembali untuk mengkloning repo yang lain sehingga saya dapat membatalkan preferensi --single-branch?

danieltalsky
sumber

Jawaban:

147

Anda dapat memberi tahu Git untuk menarik semua cabang seperti ini:

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

Jika Anda melihat ke dalam .git/config, akan terlihat seperti ini:

[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

Saya membandingkan ini dengan klon lengkap, dan melihat bahwa satu-satunya perbedaan adalah "ambil" di bawah [remote "origin"].

Catatan: Saya menjalankan Git versi 1.8.2. Opsi konfigurasi mungkin telah berubah jika Anda menjalankan Git versi lama. Jika perintah saya tidak berfungsi, saya sarankan .git/configuntuk melihat-lihat untuk melihat apakah Anda dapat melihat sesuatu yang serupa.

sarahhodne
sumber
2
Hanya ingin mengucapkan terima kasih khusus karena saya banyak membaca dan mencari di Google dan tidak dapat menemukan hal seperti ini.
danieltalsky
2
Senang untuk membantu. The gitcommand line tool sangat kuat (pada kenyataannya, sebagian besar perintah diimplementasikan dalam hal perintah lain), sehingga Anda dapat melakukan seluruh banyak hal dengan itu setelah Anda memahami bagaimana repositori diletakkan (pada dasarnya bagaimana .gitkarya folder ).
sarahhodne
Ini tidak berhasil untuk saya - setelah menjalankan perintah ini git show-ref tagsmasih gagal.
felixfbecker
1
Perhatikan bahwa solusi ini juga akan berfungsi jika cabang dangkal diklon menggunakan sintaks berikut juga, yang mengalami kekurangan yang sama seperti yang dijelaskan oleh OP:git clone --depth=1 --branch branchname [email protected]:foobar/repo.git destinationpath
danemacmillan
1
Wow, ini jauh dari intuitif! Anehnya Git tidak memiliki perintah untuk melakukannya. Ya, saya membuatnya berfungsi ... dan sekarang saya tahu tentang file konfigurasi di direktori .git juga!
kashiraja
61

Jika Anda ingin menambahkan satu cabang, Anda dapat melakukan hal berikut:

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

Bekerja dengan git versi 1.9.1

Dominik Pawlak
sumber
1
Saya jatuh cinta dengan Anda
pengguna1760150
4
Ini menambahkan beberapa fetch =baris ke .git / config, sangat berguna ketika Anda ingin beralih di antara dua cabang di remote tetapi tidak mengambil sejumlah besar cabang lain. Terima kasih!
Terry Brown
4

Untuk menambahkan cabang jarak jauh lainnya ke repositori lokal saya yang telah dikloning menggunakan --single-branch, berikut ini berfungsi untuk saya:

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

Anda juga dapat menggunakan karakter pengganti untuk [remote-branch], misalnya

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

Ini bekerja menggunakan git versi 2.21.1 . Jawaban lain yang menyarankan untuk git fetch origin [remote-branch]:[local-branch]tidak berfungsi karena ini membuat cabang lokal dalam keadaan tidak terlacak. Saat menjalankannya git pull, pertama kali mencoba menggabungkan semua komit dari cabang jarak jauh ke cabang lokal saya sekali lagi.

Arno Fiva
sumber
2
kedua kalinya saya kembali ke jawaban ini. sangat berguna. Terima kasih!
Godbout
1
Jawaban paling berguna
Denis Itskovich
1
ketiga kalinya lol.
Godbout
Sepertinya kita memiliki siklus rilis yang sama :)
Arno Fiva
1

Tambahkan saja repo asli sebagai remote baru, dan kerjakan dari sana?

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

Anda bahkan dapat menghapus remote 'origin' Anda saat ini dan mengganti nama 'myNewOrigin' menjadi 'origin' jika Anda mau.

Dari sana Anda bisa menarik / menggabungkan / rebase.

sjakubowski
sumber
0

Perubahan hanya .git/configfile repo lokal Anda, baris fetchdari [remote origin] section.

Sebelum sesuatu seperti ini

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

Setelah itu akan terjadi

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

Saya awalnya menerapkan jawaban Dominik Pawlak dan berhasil. Tetapi saya tidak dapat menarik perubahan lebih lanjut, setelah saya memasukkan lebih banyak kode ke cabang baru saya.

Ada cara lain untuk mengatur ulang single-branchseluruhnya, yang belum disebutkan di sini:

git remote remove origin
git remote add origin [email protected]:{yourProject}/{yourRepo}.git
git branch --set-upstream-to=origin/{yourBranch}  {yourBranch}
git pull

Ini mengatur ulang semuanya ke aslinya.

Houman
sumber
0

Bagi saya bekerja:

git remote remove origin
git remote add origin https://*<yourPath>*.git
git fetch
Nik Kov
sumber