Forking dari GitHub ke Bitbucket

160

Saya sedang mengerjakan proyek berdasarkan CakePHP , yang dihosting di GitHub . Proyek saya di -host di Bitbucket . Keduanya menggunakan git . Pada dasarnya saya ingin membuat 'garpu' (Saya tidak tahu apakah saya menggunakan istilah yang tepat, karena saya baru mengenal git ) dari CakePHP di repositori Bitbucket saya, agar dapat memperoleh pembaruan tanpa perlu mengunduh semua zip / tar CakePHP dan mengganti folder, lalu komit dan tekan, tapi mungkin dengan 'gabungan' (?).

entropid
sumber
5
Lihat stackoverflow.com/questions/1811730/… untuk pendekatan yang bagus untuk jenis alur kerja ini.
Dolbz
@ Dolbz tampaknya benar apa yang saya butuhkan, terima kasih!
entropid

Jawaban:

143

Tidak mungkin mengirim "tarik permintaan" di berbagai situs hari ini. Saya telah menambahkan permintaan fitur untuk ini di pelacak masalah Bitbucket: # 3288 . Saya sarankan Anda menambahkan diri Anda sebagai pengikut jika Anda ingin melacak ini.

Namun, Anda masih dapat memindahkan sumber dari GitHub ke Bitbucket tanpa harus mengunduh file zip atau tarbal. Anda membuat klon dari GitHub dan mendorong ke Bitbucket:

$ git clone https://github.com/cakephp/cakephp
$ cd cakephp
$ git push [email protected]:mg/cakephp.git master

Saya buat mg/cakephpsebagai repositori Git kosong di Bitbucket terlebih dahulu. Dengan begitu Anda bisa mendorong / menarik perubahan dari GitHub ke Bitbucket.

Martin Geisler
sumber
3
Lalu Bagaimana kita bisa menarik dari hulu?
Ruchir Shukla
1
@RuchirShukla: dengan cara yang sama, pada dasarnya. Anda harus memindahkan komit melalui mesin Anda sendiri dengan menarik dari hulu Anda. Anda kemudian mendorongnya ke situs hosting lain, sehingga menyinkronkan keduanya.
Martin Geisler
4
Ini bekerja sangat baik bagi saya kecuali saya perlu cd cakephpdi antara dua perintah. Jelas untuk yang bukan pemula, tetapi pemula mungkin bertanya-tanya mengapa itu tidak berhasil.
aaronbartell
Bisakah Anda membuat video youtube ini untuk diperagakan? Saya tidak bisa meniru itu. Saya bisa melakukan instruksi ini tetapi ketika saya mendorong dan melakukan, itu masih mencoba untuk mendorongnya ke master, bukan cabang bercabang.
Lilin
Ini tidak berfungsi sebagai a fork. Cabang dan Tag TIDAK disalin ke BitBucket.
Joel Karunungan
81

Alur kerja di bawah menambahkan repositori github sebagai remote baru yang disebut syncdan bitbucket sebagai remote origin. Itu juga menambahkan cabang dipanggil githubuntuk melacak repositori github dan cabang dipanggil masteruntuk melacak repositori bitbucket. Ini mengasumsikan Anda memiliki repositori bitbucket yang disebut "myrepository" yang kosong.

Pengaturan jarak jauh

# setup local repo
mkdir myrepository
cd myrepository
git init

# add  bitbucket remote as "origin"
git remote add origin ssh://[email protected]/aleemb/myrepository.git

# add github remote as "sync"
git remote add sync https://github.com/aleemb/laravel.git

# verify remotes
git remote -v
# should show fetch/push for "origin" and "sync" remotes

Cabang pengaturan

# first pull from github using the "sync" remote
git pull sync

# setup local "github" branch to track "sync" remote's "master" branch
git branch --track github sync/master

# switch to the new branch
git checkout github

# create new master branched out of github branch
git checkout -b master

# push local "master" branch to "origin" remote (bitbucket)
git push -u origin master

Sekarang Anda harus memiliki githubcabang lokal yang melacak cabang github repo master. Dan Anda harus memiliki mastercabang lokal yang melacak repo bitbucket ( mastercabang secara default).

Ini membuatnya mudah untuk melakukan tarik pada githubcabang, lalu menggabungkan perubahan itu ke mastercabang (rebase lebih disukai daripada gabungan) dan kemudian Anda dapat mendorong mastercabang (akan mendorongnya ke bitbucket).

aleemb
sumber
Tampaknya ini tidak berhasil, tetapi itu ide yang bagus. Pokoknya untuk memperbaikinya agar berfungsi?
bozdoz
Cabang github lokal melacak cabang master github jauh, lalu Anda mendorong ke master bitbucket jarak jauh? Kapan dorongan ke github terjadi? @aleemb
bozdoz
1
Di Git 2.2.1 --set-upstreamsudah usang ... Tapi ini berfungsi selama Anda membuat githubcabang sebelum mencoba mengatur repo hulu.
Ken Prince
3
Alih-alih melakukan --set-upstream, lakukan: git fetchdangit branch --track github sync/master
Beaudinn Greve
3
Saya pikir apa yang hilang adalah git checkout githubdan git checkout -b mastersetelah perintah git branch. Anda akan berakhir dengan cabang-cabang itu ( git branch -a): github, master, remote / asal / master, remote / sync / master
Klemens Zleptnig
31

Jika Anda ingin memperbarui repo Anda, gunakan dua remote: Github ( upstream) dan Bitbucket ( origin) seperti ini:

# Clone original CakePHP source code from Github
git clone --mirror https://github.com/cakephp/cakephp
cd cakephp
# Rename remote from `origin` to `upstream`
git remote rename origin upstream
# Add your Bitbucket repo (this is where your code will be pushed)
git remote add origin https://bitbucket/your/repo.git
# Push everything to Bitbucket
git push --mirror origin

Untuk menarik pembaruan ke CakePHP dari Github:

git pull upstream master

Untuk mendorong perubahan kode Anda ke Bitbucket:

git push origin master
Zubin
sumber
Saya pikir Anda maksud `git clone mybitibucket / cakephp / cakephp` pada git perintah pertama , kan? Ini adalah cara untuk pergi ....
ribamar
Ini bagus sekali! Terima kasih banyak! Sangat dihargai
Aakanksha
Ini juga tidak berfungsi. Cabang dan Tag tidak termasuk dalam Bitbucket.
Joel Karunungan
@ JoelKarunungan Poin bagus! Untuk mendorong segala sesuatu, termasuk cabang dan tag, saya pikir ini harus bekerja: git push --all --mirror origin. Jawaban diperbarui.
Zubin
@Zubin sudah coba ini? fatal: --all and --mirror are incompatible Juga: git pull upstream masterMelempar kesalahan fatal. fatal: Couldn't find remote ref master
Joel Karunungan
15

Saat membuat repositori baru di BitBucket, klik tombol Import repositorydi kanan atas. Masukkan url https yang ditemukan saat mengklik Clone or downloaddi Github untuk repositori yang ingin Anda garpu.

Beri nama repositori Anda, konfigurasikan pengaturan privasi Anda, dan mulai lagi!

shmuli
sumber
1
Itu kloning, bukan forking, yang berbeda.
entropid
7
Fitur ini berlabel 'Import repository' di Bitbucket, seperti yang sekarang.
Wild Pottok
1
@entropid, garpu adalah tiruan dari repo asli. Di dunia git, Forking == cloning
enorl76
@ enorl76 Namun tidak terlalu terkait dengan penggunaan umum.
Rig
2
@ enorl76 ya secara teknis itu. Tapi garpu adalah cara untuk menjaga klon "terhubung" ke repositori asli sehingga untuk mendapatkan pembaruan darinya dan akhirnya mendorongnya. Di sinilah kombinasi tautan 'asal' dan 'hulu' berperan penting. Github dan Bitbucket kemudian membangun semua seperangkat alat di hulu untuk membuat garpu lebih produktif dan ramah, seperti hal "push request" :)
Dan Niero
1

Saya telah memperhatikan bahwa sejak jawaban @Martin Geisler, Bitbucket telah mengaktifkan fitur untuk mengimpor repositori dari github.com

Saya berhasil mengimpor repo pribadi dari github.com ke repo pribadi di bitbucket.org

Berikut langkah - langkahnya :

  1. Klik pada tombol Create dan pilih Repository ('+'> Repository)
  2. Sekarang, daripada membuat repositori baru pilih repositori impor dari sudut kanan atas dari modal yang muncul.
  3. isi URL repo github Anda dan kredensial autentikasi Anda pada modal baru untuk mengimpor repositori.
  4. Itu dia. Semuanya diimpor ke bitbucket dari github dengan lancar.

Perhatikan tautan impor repositori di sudut kanan atas tangkapan layar

de1123bu58nk
sumber
0

Saya kira Anda hanya ingin mengunduh repositori dengan proyek Anda dengan mudah ... dan bahwa Anda TIDAK akan berkontribusi pada cakePHP, benar?

jika demikian, Anda hanya perlu menambahkan referensi eksternal ke repo Anda.

SVN: ekuivalen eksternal dalam GIT?

Dan kemudian, bahkan jika Anda ingin berkontribusi pada cakePHP, Anda dapat melakukannya di repo asli.

gcb
sumber