Bisakah sebuah proyek memiliki banyak sumber?


188

Bisakah sebuah proyek memiliki dua (atau lebih) "asal" di Git?

Saya ingin mendorong satu proyek ke github dan server Heroku .

Secara khusus, kesalahan ini muncul saat menambahkan repositori github:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.

8
Anda dapat memiliki repositori jarak jauh sebanyak yang Anda inginkan, tetapi Anda harus memberi mereka nama yang berbeda.
Felix Kling

Nama repositori berbeda dalam hal ini. Apakah kata "asal" nama yang dapat diubah?
Chris Dutrow

4
Yap, git remote rename <old> <new>: linux.die.net/man/1/git-remote . Tetapi Anda juga dapat memberi nama repositori Github secara berbeda ...
Felix Kling


Dan mungkinkah menjadikan salah satu remote sebagai default sehingga saya tidak diminta untuk secara eksplisit menuliskan nama remote itu setiap kali saya mendorong?
detektif

Jawaban:


275

Anda dapat memiliki sebanyak mungkin remote yang Anda inginkan, tetapi Anda hanya dapat memiliki satu remote bernama "asal". Remote yang disebut "origin" tidak spesial dengan cara apa pun, kecuali bahwa itu adalah remote default yang dibuat oleh Git ketika Anda mengkloning repositori yang ada. Anda dapat mengonfigurasi remote kedua, tekan ke / tarik dari remote itu, dan atur beberapa cabang untuk melacak cabang dari remote itu bukan dari asalnya.

Coba tambahkan remote yang disebut "github" sebagai gantinya:

$ git remote add github https://github.com/Company_Name/repository_name.git

# push master to github
$ git push github master

# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch

# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch

4
Seperti yang ditunjukkan oleh jawaban dengan suara tertinggi untuk pertanyaan yang mungkin digandakan ini - sebuah remote dapat merujuk ke beberapa repositori. Oleh karena itu Anda dapat mendorong ke satu remote dan memperbarui dua atau lebih repositori, tidak jelas apakah itu tujuan OP.
AD7six

Apa saja contoh praktis mengapa Anda ingin melakukan ini? Mengapa Anda ingin satu direktori diarahkan ke beberapa repositori? Setiap repositori biasanya memiliki direktori khusus
dspacejs

4
@ mightyspaj Hampir semua orang yang menggunakan Heroku memiliki panggilan jarak jauh origindan panggilan jarak jauh heroku.
meagar

@mightyspaj, Atau jika tim Anda menggunakan garpu dan Anda terkadang ingin mengaksesnya. Kami melakukannya di tim kami bekerja dengan tim di UTC berbeda sehingga ketika kami menyetujui PR, kami dapat rebase / mendorong atas nama di sana dengan menggunakan garpu sana dan dapat menggabungkan kode sekarang, bukan besok).
Benoit Drapeau

Apakah ada cara untuk mendorong semua cabang lokal sekaligus ke remote baru?
Tanasis

89

Sebagai catatan tambahan bagi siapa pun yang menemukan pertanyaan ini di kemudian hari, dimungkinkan untuk melakukan push asal ke lebih dari satu server repositori git sekaligus.

Anda dapat mencapai ini dengan menggunakan perintah berikut untuk menambahkan URL lain ke remote asal.

git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git

8
Untuk pemikiran lebih lanjut tentang ini, lihat pertanyaan ini .
moi

3
Oke, jadi bagaimana cara saya menghapus salah satu dari asal-usul ini tanpa menghapus semuanya?
Michael

@Michael Anda dapat mengedit ./git/configfile dan menghapus file url di bagian [remote "origin"]
Pini Cheyni

8
@ Michaelgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
Afrig Aminuddin

Haruskah semua remote memiliki riwayat commit yang sama? Bagaimana jika saya ingin mendorong komitmen tertentu ke satu remote dan bukan yang lain
Qasim

44

Berikut adalah contoh proyek dengan beberapa remote, GitHub & GitLab:

  1. Tambahkan repo jarak jauh untuk GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Tambahkan repo jarak jauh untuk GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Sekarang Anda memiliki banyak remote di proyek. Periksa dengangit remote -v

    $ git remote -v
    github https://github.com/Company_Name/repository_name.git (fetch)
    github https://github.com/Company_Name/repository_name.git (push)
    gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
    gitlab https://gitlab.com/Company_Name/repository_name.git (push)
    
  4. Bagaimana Anda mendorong ke beberapa repositori?

    $ git push github && git push gitlab
    

2
Tidak akan hanya $ git pushmendorong ke semua remote?
Water Cooler v2

Kami memiliki masalah ketika saya mencoba untuk mendorong github kemudian otomatis mendorong ke gitlab. Bisakah Anda membantu saya? Saya ingin mendorong satu per satu asal.
Mitul Marsoniya

bagaimana saya bekerja dengan ini jika saya memiliki dua proyek di gitlab, dua repositori. saya mendapatkan kode dari satu proyek lalu mendorongnya ke proyek lain?
muzi jack

2

Anda dapat menambahkan akun jarak jauh lain ke repositori Anda dengan memberikan nama yang berbeda dan bukan asal. Anda bisa menggunakan nama seperti origin2. sehingga perintah git Anda dapat dimodifikasi sebagai

git remote add origin2 https://github.com/Company_Name/repository_name.git

1
git remote add origin2 https://github.com/Company_Name/repository_name.git

dan untuk penggunaan push:

git push -u origin2 master

1
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git

Sekarang kamu memiliki 2 asal.


1
Jawaban ini lebih bermanfaat / lebih baik daripada yang lain berkat --pushopsi ini.
Dmitri Zaitsev
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.