Solusi yang sangat bagus dan sederhana. BTW Anda bisa menggunakan xargs -l bukan -L 1, opsi -l sama dengan -L 1. Juga, kadang-kadang saya menambahkan --semua ke git push. git remote | xargs -l git push --all
Git memungkinkan Anda untuk membuat panggilan itu menjadi perintah khusus. Masukkan saja ke dalam file yang 1) ada di jalur Anda, 2) Anda telah menjalankan izin, dan 3) disebut "git- [nama kustom]" (mis. Git-foo, git-push-all) dan Anda akan cukup ketik "git [nama khusus]" (mis. git foo, git push-all).
Andrew Martin
2
@ Tony Pada Ubuntu, man xargsmengatakan opsi -lsudah usang karena tidak ada dalam spesifikasi POISX.
wjandrea
2
@ Kyb In git alias sintaks, !berarti yang berikut ini bukan perintah internal git, tetapi perintah shell eksternal.
lemah
285
Buat allremote dengan beberapa URL repo dengan namanya:
git remote add all origin-host:path/proj.git
git remote set-url --add all nodester-host:path/proj.git
git remote set-url --add all duostack-host:path/proj.git
Trik super keren! Satu-satunya kelemahan adalah bahwa ia tidak menggerakkan kepala jauh. Anda harus berlari git fetch --allsegera setelah melakukan push seperti itu.
madhead
8
Mr. Torvalds (pencipta Git) menyebutkan bahwa ia menggunakan metode ini, tetapi ia menyatakan bahwa itu hanya untuk kenyamanan dan tidak menawarkan keuntungan teknis marc.info/?l=git&m=116231242118202&w=2 "Dan pada akhirnya, bahkan" git push all "yang mendorong ke beberapa repositori sebenarnya akan berakhir dengan menghubungkan satu kali untuk setiap repositori, jadi itu benar-benar hanya singkatan untuk melakukan beberapa" git push "es. Tidak ada keuntungan teknis nyata, hanya kenyamanan."
Matt
14
Satu masalah dengan pendekatan ini adalah Anda harus menambahkan URL baru ke allremote begitu tersedia, sedangkan git remote | xargs -L1 git push --allakan secara otomatis mengambil remote baru.
Raffi Khatchadourian
2
Kiat: Agar tidak perlu mengetik allsetiap kali Anda mengirim komit, cukup gunakan "asal" alih-alih "semua":git remote set-url --add origin nodester-host:path/proj.git
Macabeus
lupa mengatur url push jika git pushtidak, tidak akan memperbarui semua url. jawaban diperbarui sesuai
user3338098
88
Jika Anda ingin selalu mendorong ke repo1, repo2, dan repo3 tetapi selalu hanya menarik dari repo1, atur remote 'asal' sebagai
Saya tidak yakin mengapa ini tidak mendapat lebih banyak suara. Ini sebenarnya sangat nyaman karena memungkinkan Anda untuk melakukan git pushtanpa argumen.
Husky
1
Pilih saya, tolong!
Meng Lu
1
Ini menurut saya cara yang lebih tepat untuk melakukan ini. Seharusnya memiliki suara tertinggi.
Ahmad
Ini sangat berguna. Apakah mungkin untuk membatasi pushurl hanya untuk cabang utama?
fbucek
17
Sebagai Alternatif CLI untuk mengedit file .git / config, Anda dapat menggunakan perintah berikut:
# git remote add all origin-host:path/proj.git
# git remote set-url --add all nodester-host:path/proj.git
# git remote set-url --add all duostack-host:path/proj.git
Hal yang sama juga berlaku di git push all --allsini.
Anda telah menyelesaikan hal yang sama dengan jawaban # 1. Anda baru saja melakukannya dengan Baris Perintah alih-alih mengedit mentah dari file konfigurasi.
Saya menulis fungsi bash pendek untuk mendorong ke banyak remote dalam satu panggilan. Anda dapat menentukan satu remote sebagai parameter, beberapa remote yang dipisahkan oleh spasi atau tidak menentukan apa pun untuk mendorongnya ke semua remote.
Ini dapat ditambahkan ke .bashrc atau .bash_profile Anda.
function GitPush {
REMOTES=$@
# If no remotes were passed in, push to all remotes.
if [[ -z "$REMOTES" ]]; then
REM=`git remote`
# Break the remotes into an array
REMOTES=$(echo $REM | tr " " "\n")
fi
# Iterate through the array, pushing to each remote
for R in $REMOTES; do
echo "Pushing to $R..."
git push $R
done
}
Contoh: Misalkan repo Anda memiliki 3 remote: rem1, rem2 dan rem3.
# Pushes to rem1
GitPush rem1
# Pushes to rem1 and rem2
GitPush rem1 rem2
# Pushes to rem1, rem2 and rem3
GitPush
all
remote untuk mendorong semua remote Anda, lihat: stackoverflow.com/a/18637593/802365Jawaban:
Untuk mendorong semua cabang ke semua remote:
Atau jika Anda ingin mendorong cabang tertentu ke semua remote:
Ganti
master
dengan cabang yang ingin Anda tekan.(Bonus) Untuk membuat alias git untuk perintah:
Menjalankan
git pushall
sekarang akan mendorong semua cabang ke semua remote.sumber
xargs: illegal option -- l
menggunakan OSX.git remote | xargs -L1 git push
man xargs
mengatakan opsi-l
sudah usang karena tidak ada dalam spesifikasi POISX.!
berarti yang berikut ini bukan perintah internal git, tetapi perintah shell eksternal.Buat
all
remote dengan beberapa URL repo dengan namanya:Lalu saja
git push all --all
.Beginilah tampilannya
.git/config
:sumber
git fetch --all
segera setelah melakukan push seperti itu.all
remote begitu tersedia, sedangkangit remote | xargs -L1 git push --all
akan secara otomatis mengambil remote baru.all
setiap kali Anda mengirim komit, cukup gunakan "asal" alih-alih "semua":git remote set-url --add origin nodester-host:path/proj.git
git push
tidak, tidak akan memperbarui semua url. jawaban diperbarui sesuaiJika Anda ingin selalu mendorong ke repo1, repo2, dan repo3 tetapi selalu hanya menarik dari repo1, atur remote 'asal' sebagai
Konfigurasikan di baris perintah:
Jika Anda hanya ingin menarik dari
repo1
tetapi mendorong kerepo1
danrepo2
untuk cabang tertentuspecialBranch
:Lihat https://git-scm.com/docs/git-config#git-config-branchltnamegtremote .
sumber
git push
tanpa argumen.Sebagai Alternatif CLI untuk mengedit file .git / config, Anda dapat menggunakan perintah berikut:
Hal yang sama juga berlaku di
git push all --all
sini.Anda telah menyelesaikan hal yang sama dengan jawaban # 1. Anda baru saja melakukannya dengan Baris Perintah alih-alih mengedit mentah dari file konfigurasi.
sumber
Saya menulis fungsi bash pendek untuk mendorong ke banyak remote dalam satu panggilan. Anda dapat menentukan satu remote sebagai parameter, beberapa remote yang dipisahkan oleh spasi atau tidak menentukan apa pun untuk mendorongnya ke semua remote.
Ini dapat ditambahkan ke .bashrc atau .bash_profile Anda.
Contoh: Misalkan repo Anda memiliki 3 remote: rem1, rem2 dan rem3.
sumber
Anda dapat menggunakan kait git - terutama
pre-push
: menambahkan dorongan non-asal ke.git/hooks/pre-push
.sumber