Singkatnya: apakah ada cara untuk mendorong git repo ke dan menarik dari daftar repo jarak jauh (daripada satu "asal" tunggal)?
Lama: Saya sering mengalami situasi ketika saya sedang mengembangkan aplikasi di banyak komputer, dengan konektivitas yang berbeda - misalnya laptop saat transit, komputer "A" saat saya berada di lokasi tertentu, dan komputer lain "B" sementara di yang lain. Selain itu, laptop mungkin memiliki konektivitas hanya dengan "A" atau "B", dan terkadang keduanya.
Yang ingin saya lakukan adalah agar git selalu "menarik" dari dan "mendorong" ke semua komputer yang saat ini dapat terhubung, sehingga lebih mudah untuk beralih dari satu mesin ke yang lain dan terus bekerja dengan lancar.
git
fitur kelas satu , termasuk dalam jawaban malvine di bawah ini . Jawaban yang diterima salah.Jawaban:
Anda dapat mengonfigurasi beberapa repositori jarak jauh dengan
git remote
perintah:Untuk mengambil dari semua remote yang dikonfigurasi dan memperbarui cabang pelacakan, tetapi tidak bergabung
HEAD
, lakukan:Jika saat ini tidak terhubung ke salah satu remote, itu akan mengambil waktu atau melemparkan kesalahan, dan pergi ke yang berikutnya. Anda harus menggabungkan secara manual dari repositori yang diambil, atau
cherry-pick
, tergantung pada bagaimana Anda ingin mengatur pengumpulan perubahan.Untuk mengambil cabang master dari alt dan menariknya ke kepala Anda saat ini, lakukan:
Jadi sebenarnya
git pull
hampir singkatan untukgit pull origin HEAD
(sebenarnya terlihat di file konfigurasi untuk menentukan ini, tetapi Anda mendapatkan ide).Untuk mendorong pembaruan, Anda harus melakukannya untuk setiap repo secara manual.
Suatu dorongan, saya pikir, dirancang dengan alur kerja sentral-repositori dalam pikiran.
sumber
Melakukan ini secara manual tidak lagi diperlukan , dengan versi modern
git
! Lihat solusi Malvineous , di bawah ini.Diproduksi ulang di sini:
Jawaban asli:
Ini sesuatu yang telah saya gunakan cukup lama tanpa konsekuensi buruk dan disarankan oleh Linus Torvalds di milis git .
Solusi araqnid adalah solusi yang tepat untuk membawa kode ke dalam repositori Anda ... tetapi ketika Anda, seperti saya, memiliki beberapa upstream stream yang setara (saya menyimpan beberapa proyek kritis saya yang dikloning ke upstream pribadi, GitHub, dan Codaset), itu bisa menjadi sakit untuk mendorong perubahan untuk masing-masing, setiap hari.
Singkat cerita,
git remote add
semua remote Anda secara terpisah ... dan kemudiangit config -e
dan tambahkan remote-gabungan. Dengan asumsi Anda memiliki repositori iniconfig
:... untuk membuat remote-gabungan untuk
"Paws"
dan"Codaset"
, saya bisa menambahkan yang berikut setelah semuanya:Setelah saya melakukan ini, ketika saya
git push Origin Master
, itu akan mendorong keduanyaPaws/Master
danCodaset/Master
secara berurutan, membuat hidup sedikit lebih mudah.sumber
git config -e
membuka.git/config
file di editor pilihan Anda.git
baris perintah mendukung ini secara asli, dengangit remote set-url ... --add
.[branch "Master"]
setremote = Origin
dangit pull
akan menggunakan kedua remote.Sejak git 1.8 (Oktober 2012) Anda dapat melakukan ini dari baris perintah:
Kemudian
git push
akan mendorong ke user1 @ repo1, lalu mendorong ke user2 @ repo2.sumber
git fetch
. (Mengingat ini, saya tidak mengerti apa tujuan darigit remote set-url --add
tanpa itu--push
.)Saya menambahkan alias ini ke my ~ / .bashrc:
sumber
git config alias.pushall '!for i in
remote git; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
Anda dapat menambahkan remote dengan:
Kemudian untuk memperbarui semua repo lakukan:
sumber
Inilah contoh saya dengan skrip bash di dalam
.gitconfig
bagian aliassumber
Saya menambahkan dua pushurl terpisah ke "asal" jauh di file congfig .git. Ketika saya menjalankan
git push origin "branchName"
Kemudian itu akan berjalan melalui dan mendorong ke setiap url. Tidak yakin apakah ada cara yang lebih mudah untuk mencapai hal ini tetapi ini bekerja untuk saya sendiri untuk mendorong ke kode sumber Github dan untuk mendorong ke kode sumber My.visualStudio pada saat yang sama.sumber
Saya mengambil kebebasan untuk memperluas jawaban dari nona-urbiz; tambahkan saja ini ke ~ / .bashrc Anda:
Pemakaian:
Jika Anda tidak memberikan argumen cabang untuk git-pullall maka tarikan dari remote non-default akan gagal; membiarkan perilaku ini apa adanya, karena analog dengan git.
sumber
Anda membutuhkan skrip untuk mengulanginya. Git tidak menyediakan "push all." Secara teoritis Anda bisa melakukan push di banyak utas, tetapi metode asli tidak tersedia.
Pengambilan bahkan lebih rumit, dan saya sarankan melakukannya secara linear.
Saya pikir jawaban terbaik Anda adalah memiliki satu mesin yang setiap orang melakukan push / pull, jika memungkinkan.
sumber
Untuk memperbarui remote (yaitu
pull
kasing), segalanya menjadi lebih mudah.Pernyataan Linus
dalam entri yang direferensikan di milis Git dalam jawaban elliottcable tidak lagi benar.
git fetch
mempelajari--all
parameter di suatu tempat di masa lalu yang memungkinkan untuk mengambil semua remote sekaligus.Jika tidak semua diminta, orang dapat menggunakan
--multiple
sakelar untuk menentukan beberapa remote atau grup.sumber
Saya ingin bekerja di VSO / TFS, lalu dorong publik ke GitHub saat siap. Repo awal dibuat dalam VSO pribadi. Ketika tiba saatnya untuk menambahkan ke GitHub saya lakukan:
Bekerja seperti ...
Untuk pemeriksaan kewarasan, keluarkan "git remote -v" untuk mendaftar repositori yang terkait dengan proyek.
Cara sederhana, berhasil untuk saya ... Semoga ini bisa membantu seseorang.
sumber
git push -f
tanpa alasan, misalnya kegagalangit push
atau tahu persis apa yang dilakukan seseorang, adalah ide yang buruk dan berpotensi berbahaya. Ini juga tidak menjawab pertanyaan, tetapi bagaimana menambahkan remote kedua.tambahkan alias ke global gitconfig (/home/user/.gitconfig) dengan perintah di bawah ini.
Setelah Anda melakukan kode, kami katakan
untuk mendorong ke asal secara default. Setelah alias di atas, bisa kita katakan
dan kode akan diperbarui ke semua remote termasuk remote asal.
sumber
Menambahkan
all
remote menjadi agak membosankan karena Anda harus melakukan setup pada setiap mesin yang Anda gunakan.Juga,
bash
dangit
alias asalkan semua menganggap bahwa Anda telah mendorong semua remote. (Mis: Saya memiliki garpusshag
yang saya pertahankan di GitHub dan GitLab. Saya memiliki remote hulu yang ditambahkan, tetapi saya tidak memiliki izin untuk mendorongnya.)Berikut ini adalah
git
alias yang hanya mendorong ke jarak jauh dengan URL push yang menyertakan@
.sumber
sumber