Saya ingin mendorong dan menarik semua cabang secara default, termasuk yang baru dibuat.
Apakah ada pengaturan yang dapat saya tetapkan untuk itu?
Kalau tidak, ketika saya menambahkan cabang baru, secara lokal dan saya ingin menariknya dari server, apa cara paling sederhana untuk melakukannya?
Saya membuat cabang baru dengan nama yang sama dan mencoba menarik tetapi tidak berhasil. Meminta saya untuk semua konfigurasi jarak jauh cabang. Bagaimana cara mengaturnya.
git
version-control
branch
push
Lakshman Prasad
sumber
sumber
Jawaban:
Cara paling sederhana adalah dengan melakukan:
Ini akan mendorong tag dan cabang.
sumber
-u
satu kali, misgit push --all origin -u
. Pelacakan sudah diatur dan setelah itu Anda cukup menggunakangit push
.git push --tags origin
untuk mendorong semua tag.Dengan git modern, Anda selalu mengambil semua cabang (sebagai cabang pelacakan jarak jauh ke dalam
refs/remotes/origin/*
namespace, terlihat dengangit branch -r
ataugit remote show origin
).Secara default (lihat dokumentasi
push.default
variabel config) Anda mendorong cabang-cabang yang cocok , yang berarti bahwa pertama-tama Anda harus melakukannyagit push origin branch
agar git selalu mendorongnyagit push
.Jika Anda ingin selalu mendorong semua cabang , Anda dapat mengatur push refspec. Dengan asumsi bahwa remote dinamai
origin
Anda dapat menggunakan git config :atau secara langsung mengedit
.git/config
file untuk memiliki sesuatu seperti berikut:sumber
git push --all origin
bagus sekali untuk menerbitkan semua cabang dan tag, meskipun secara default sampai versi semantik 'yang cocok' artinya Anda akan mendorong semua cabang setelahnya ... kecuali Anda menambahkan cabang atau tag baru. The pengaturan untuk "push [...] semua cabang secara default" adalah seperti yang tertulis.fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
(Catatan: Saya menggunakan git 2.0. Saya masih mencari cara untuk memperbaikinya.)push.default
adalahsimple
.Memasukkan + dalam spec push mungkin adalah ide yang buruk, karena itu berarti bahwa git akan dengan senang hati melakukan push non-fast-forward bahkan tanpa -f , dan jika server jarak jauh diatur untuk menerima itu, Anda dapat kehilangan sejarah.
Coba saja ini:
sumber
--global
opsi ke masing-masing untuk menjadikan ini sebagai standar global untuk semua repositori Anda.git remote add
.Saya telah menggunakan perintah di bawah ini untuk memigrasi semua cabang ke repositori baru.
CATATAN : Saya harus menggunakan perintah kedua terakhir (yaitu push master dulu) saat mengkloning repo dari Atlassian Stash ke AWS CodeCommit (blank repo). Saya tidak yakin alasannya, tetapi setelah mendorong (
git push new-origin --mirror
) cabang default merujuk ke beberapa cabang selainmaster
.sumber
git push new_origin --all
hanya mendorong cabang lokal Anda saat ini ke new_origin, tidak semua cabang asal.--bare
repositori, yang sedikit berbeda dari repositori biasa, hanya memiliki.git
file, bukan file Anda. Ini cukup sempurna jika Anda tidak akan melakukan pekerjaan di dalamnya. Lihat--bare
dan--mirror
git-scm.com/docs/git-clone .Jika Anda memindahkan cabang ke repo baru dari yang lama dan TIDAK memiliki semua cabang repo lama setempat, Anda harus melacaknya terlebih dahulu.
Kemudian tambahkan repo jarak jauh baru Anda:
Kemudian Anda dapat mendorong semua menggunakan perintah ini:
Atau Anda dapat mengkonfigurasi repo menggunakan perintah git config yang dicatat dalam respons lain di sini jika Anda tidak melakukan ini satu kali atau hanya ingin memindahkan cabang lokal.
Yang penting, tanggapan lain hanya mendorong semua cabang LOKAL. Jika cabang hanya ada pada repositori REMOTE alternatif, mereka tidak akan bergerak tanpa melacaknya terlebih dahulu. Untuk for loop yang disajikan di sini akan membantu dengan itu.
sumber
git branch --track reponame origin/reponame
jika tidak, Anda akan mendapatkan semua cabang jarak jauh dilacak di cabang lokal saat inigit branch -r | grep -v '\->' | sed 's/ origin\///'
, yang hanya memberikan nama cabang jarak jauh.Untuk melihat semua cabang tanpa menggunakan
git branch -a
Anda harus menjalankan:Sekarang Anda dapat melihat semua cabang:
Untuk mendorong semua cabang, coba:
sumber
git fetch --all
?Jika Anda memindahkan semua cabang ke repo baru dari yang lama maka di repo lokal Anda, Anda perlu mengatur pelacakan setiap cabang ke cabang asal yang ada, sebelum mendorong ke repo baru, jika tidak semua cabang asal Anda tidak akan muncul di asal baru. Lakukan ini secara manual dengan melacak atau memeriksa setiap cabang, atau gunakan satu liner:
Perintah satu baris ini didasarkan pada versi-versi itu dalam jawaban lain di halaman ini, tetapi bisa dibilang lebih baik karena:
Selanjutnya, jika Anda mengganti asal, ganti tautan ke asal lama dan arahkan ke remote baru. Pastikan Anda membuat remote baru terlebih dahulu, menggunakan bitbucket / github GUI, tetapi jangan menambahkan file apa pun ke dalamnya atau akan ada masalah penggabungan. Misalnya
Sekarang dorong. Perhatikan bahwa perintah kedua diperlukan untuk mendorong tag juga:
sumber
Solusi tanpa hardcoding
origin
pada konfigurasiGunakan yang berikut ini di gitconfig global Anda
Ini mendorong semua cabang dan semua tag
Mengapa Anda TIDAK harus hardcode
origin
dalam konfigurasi?Jika Anda hardcode:
origin
sebagai remote di semua repo. Jadi Anda tidak akan bisa menambahkan asal, tetapi Anda harus menggunakanset-url
.origin
sudah ada (dari titik 1) ingat :)Pengambilan sudah dilakukan oleh git modern
Sesuai jawaban Jakub Narębski:
sumber