Melacak satu cabang jarak jauh sebagai cabang lokal cukup mudah.
$ git checkout --track -b ${branch_name} origin/${branch_name}
Mendorong semua cabang lokal ke jarak jauh, membuat cabang jarak jauh baru sesuai kebutuhan juga mudah.
$ git push --all origin
Saya ingin melakukan yang sebaliknya. Jika saya memiliki nomor X cabang jarak jauh di satu sumber:
$ git branch -r
branch1
branch2
branch3
.
.
.
Dapatkah saya membuat cabang pelacakan lokal untuk semua cabang jarak jauh tanpa perlu membuat masing-masing cabang secara manual? Katakan sesuatu seperti:
$ git checkout --track -b --all origin
Saya sudah googled dan RTM, tetapi sejauh ini telah naik ranjang.
git checkout --track origin/branchname
git pull origin
dan tekantab
, untuk mendapatkan daftar cabang jauh. Kemudian lanjutkan mengetik dan tekanreturn
.Jawaban:
Menggunakan bash:
setelah git 1.9.1 sebelum git 1.9.1Perbarui cabang, dengan asumsi tidak ada perubahan pada cabang pelacakan lokal Anda:
Abaikan peringatan refname ambigu, git tampaknya lebih memilih cabang lokal sebagaimana mestinya.
sumber
git pull
memiliki--all
sakelar, yang akan mengambil + menggabungkan semua cabang yang dilacak.Jawaban yang diberikan oleh Otto baik, tetapi semua cabang yang dibuat akan memiliki "asal /" sebagai awal nama. Jika Anda hanya ingin bagian terakhir (setelah / terakhir) menjadi nama cabang Anda, gunakan ini:
Ini juga bermanfaat untuk tidak memberi Anda peringatan tentang referensi yang ambigu.
sumber
grep -v master
, bagaimanagrep -v /HEAD
? Ini tampaknya menyaring cabang default, tanpa perlu penyesuaianSebagian besar jawaban di sini lebih rumit dari penguraian output
git branch -r
. Anda dapat menggunakanfor
loop berikut untuk membuat cabang pelacakan terhadap semua cabang di remote seperti itu.Contoh
Katakanlah saya punya cabang terpencil ini.
Konfirmasikan bahwa kami tidak melacak apa pun selain master, secara lokal:
Anda dapat menggunakan liner satu ini untuk membuat cabang pelacakan:
Sekarang konfirmasikan:
Untuk menghapusnya:
Jika Anda menggunakan
-vv
sakelar ini,git branch
Anda dapat mengonfirmasi:Kerusakan untuk loop
Loop pada dasarnya memanggil perintah
git branch -r
, memfilter setiap HEAD atau cabang master di output menggunakangrep -vE "HEAD|master"
. Untuk mendapatkan nama hanya cabang dikurangiorigin/
substring kami menggunakan manipulasi string Bash${var#stringtoremove}
. Ini akan menghapus string, "stringtoremove" dari variabel$var
. Dalam kasus kami, kami menghapus stringorigin/
dari variabel$i
.CATATAN: Atau Anda dapat menggunakan
git checkout --track ...
untuk melakukan ini juga:Tapi saya tidak terlalu peduli dengan metode ini, karena ini akan mengalihkan Anda di antara cabang-cabang saat melakukan checkout. Ketika selesai itu akan meninggalkan Anda di cabang terakhir yang dibuatnya.
Referensi
sumber
Perbarui Q1 2020: Mohsen Abasi mengusulkan di komentar , berdasarkan 2014 slm 's jawabannya , alternatif sederhana:
Dan itu menggunakan
$()
backticks usang .Seperti yang saya sebutkan di jawaban tua lain , menggunakan
git for-each-ref
adalah mungkin lebih cepat .Dan saya akan menggunakan yang baru (Git 2.23+)
git switch
perintah , yang menggantikan membingungkangit checkout
.Dengan begitu, tidak
grep
perlu.Old (2011) jawaban asli:
Inilah one-liner yang saya gunakan (dalam bash shell, diuji dengan msysgit1.7.4):
Untuk salin-tempel:
Untuk lebih mudah dibaca:
remote
variabel (itu bisa 'origin
' atau nama apa pun yang telah Anda tetapkan untuk salah satu remote dari repo Git Anda saat ini).origin/a/Branch/Name => a/Branch/Name
melaluiawk
ekspresi.itu akan mengatur cabang upstream melalui
--set-upstream-to
(atau-u
) , bukan--track
:Keuntungannya adalah, jika cabang sudah ada, itu tidak akan gagal dan itu tidak akan mengubah asal cabang itu, itu hanya akan mengonfigurasi
branch.xxx.(remote|merge)
pengaturan.Perintah itu akan membuat cabang lokal untuk semua cabang hulu jarak jauh, dan mengatur pengaturan jarak jauh dan menggabungkannya ke cabang jarak jauh itu.
sumber
--set-upstream-to
bukan--track
.git switch
sebagai gantinyagit checkout
. Tapi ide Anda (sangat bagus) tetap ada.Anda dapat menulis dengan cukup mudah, tetapi saya tidak tahu kapan itu akan berharga. Cabang-cabang itu akan dengan cepat tertinggal, dan Anda harus memperbaruinya setiap saat.
Cabang-cabang jarak jauh secara otomatis akan terus diperbarui, jadi paling mudah hanya dengan membuat cabang lokal pada titik di mana Anda sebenarnya ingin mengerjakannya.
sumber
git up
memperbarui semua cabang lokal.sumber
| grep -v HEAD
pipa agar berfungsi dengan benar.tanpa skrip apa pun (dalam direktori kosong):
setelah itu, semua cabang terpencil akan dianggap lokal.
asli (dalam bahasa Rusia) .
sumber
Jika Anda ingin menggunakan PowerShell dan remote Anda disebut asal. Maka ini bekerja.
sumber
git svn clone'd
repo saya :git branch -r | %{$_ -replace " origin/"} | %{git checkout -b $_ "origin/$_"}
git branch -r | %{$_ -replace " origin/"} | %{git branch -u "origin/$_" $_}
Gunakan ini dan Anda tidak akan memiliki peringatan seperti: refname 'origin / dev' ambigu
sumber
Inilah solusi saya untuk perintah BASH yang dirujuk oleh @tjmcewan:
Tujuan saya adalah untuk memecahkan masalah bahwa semua cabang yang dibuat akan memiliki "asal /" sebagai awal nama, karena saya menguji bahwa variabel $ remote masih termasuk "asal /":
sumber
Untuk melakukan hal yang sama dengan jawaban tjmcewan tetapi pada Windows, panggil ini dari file batch :
Atau ini dari baris perintah :
sumber
Dari git 2.23 dan selanjutnya:
The
-C
bendera untukgit switch
menciptakan atau reset jika sudah ada.dokumentasi switch git
sumber
Jika Anda sudah memiliki beberapa cabang diperiksa dan ingin
Anda dapat menggunakan skrip yang kompatibel dengan bash dan zsh:
sumber
Penjelasan:
baris 1: 'git branch -r' (diikuti oleh 'git remote update' untuk memperbarui info tentang perubahan pada remote) mencantumkan semua cabang jarak jauh; 'egrep -vw' digunakan untuk mengetuk entri yang memiliki HEAD dan master dalam hasilnya.
baris 3: Lacak cabang jarak jauh bernama sambil memeriksanya secara lokal. Awk sederhana digunakan untuk menghindari 'asal /' menjadi akhiran untuk cabang lokal.
sumber
Menggunakan bash, Jika Anda ingin checkout semua cabang:
Penting untuk dicatat bahwa ketika Anda melakukan pengambilan yang menurunkan cabang-cabang pelacakan jarak jauh baru, Anda tidak secara otomatis memiliki salinannya yang dapat diedit secara lokal.
sumber