Membagi repositori Git dari GitHub ke GitLab

94

Misalkan saya ingin menerapkan perbaikan pada proyek orang lain. Proyek itu berada di GitHub.

Saya dapat membuat garpu di GitHub dan menerapkan perbaikannya.

Namun, saya ingin membuat garpu saya di GitLab daripada di GitHub.

Apakah itu mungkin? Bagaimana?

Saya telah membaca artikel ini: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

Bagaimanapun, saya tidak yakin apa yang harus saya lakukan dalam kasus saya.

  • Haruskah saya membuat garpu di GitLab proyek dari GitHub entah bagaimana?
  • Atau haruskah saya membuat mirror di GitLab proyek dari GitHub?
  • Atau haruskah saya membuat cermin di GitLab dan kemudian membuat cermin?
  • Atau haruskah saya melakukan sesuatu yang sama sekali berbeda?

Apa pendekatan yang benar.

Terima kasih.

MEMPERBARUI

Pencerminan repositori di GitLab mungkin tidak masuk akal. Saya dapat membuat mirror dari repositori GitHub MY di GitLab tetapi saya tidak dapat membuat mirror dari repositori orang lain.

https://docs.gitlab.com/ee/workflow/repository_mirroring.html

Inilah yang telah saya lakukan sejauh ini:

Saya telah mengkloning proyek GitHub asli ke komputer lokal saya. Saya telah melakukan perbaikan ke cabang baru di repositori lokal saya. Saya telah membuat proyek kosong di GitLab. Saya telah menetapkan asal di repositori lokal saya ke proyek kosong di GitLab dan mendorong kedua cabang ke GitLab. Saya telah menyiapkan upstream di repositori lokal saya ke repositori GitHub.

Ketika saya ingin mendapatkan komit baru dari repositori GitHub asli ke repositori di GitLab (yaitu menyinkronkan repositori), saya dapat melakukan ini menggunakan repo lokal saya sebagai langkah perantara. Namun, tidak ada hubungan langsung antara repo di GitHub dan repo di GitLab. Apakah penyiapan saya benar? Apakah ada perbedaan jika saya membuat garpu di GitHub?

Cimlman
sumber

Jawaban:

124

Jika Anda hanya ingin melacak perubahan, pertama-tama buat repositori kosong di GitLab (atau apa pun yang mungkin Anda gunakan) dan klon ke komputer Anda.

Kemudian tambahkan proyek GitHub sebagai remote " upstream " dengan:

git remote add upstream https://github.com/user/repo

Sekarang Anda dapat mengambil dan menarik dari hulu jika ada perubahan. (Anda juga dapat mendorong atau menggabungkannya jika Anda memiliki hak akses.)

git pull upstream master

Terakhir, dorong kembali ke repositori GitLab Anda sendiri:

git push origin master

Jika Anda tidak ingin menarik upstream / push origin secara manual, GitLab menawarkan kemampuan mirroring di Settings => Repository => Mirroring repositories.

Chris Watts
sumber
15
Saya hanya ingin melengkapi jawaban ini dengan mengapa ini adalah pendekatan yang benar. "Forking" adalah konsep yang dibuat oleh GitHub sehingga hanya ada di GitHub, namun tetap berguna. Jika Anda menganggap git murni itu sendiri (seperti server git murni yang berjalan di suatu tempat di jaringan Anda), itu seperti mengkloning repo ke server Anda sendiri dan kemudian mengkloningnya ke komputer lokal Anda. Anda akan menambahkan repo asli sebagai upstream secara lokal. Saya percaya itulah yang dilakukan GitHub di balik layar.
Bruno Finger
9
Hanya ingin menambahkan bahwa forking memang ada di GitLab, lihat di sini sebagai contoh.
bellackn
1
Saya harus menggunakan: tarik master hulu --allow-unrelated-histories
hmojtaba
Bagaimana Anda mengirimkan permintaan tarik nanti?
Erik Aronesty
1
@ErikAronesty Itu lebih rumit karena "Permintaan Tarik" bukanlah hal yang git, melainkan GitHub. Salah satu cara untuk melakukan ini adalah dengan membuat salinan di GitHub dan menambahkan repo bercabang Anda sebagai remote lain, katakanlah git remote add upstream-fork [email protected]:myuser/repo. Maka itu tinggal masalah git push upstream-fork masterdan kirimkan permintaan penarikan Anda melalui situs GitHub.
Chris Watts
17

Cara khusus browser:

  1. Buat proyek baru di Gitlab (Cukup proyek kosong dengan nama saja)
  2. Buka Pengaturan -> Respositoria
  3. Masukkan URL GitHub di bawah 'Mirroring repositories'
  4. Pastikan 'Arah cermin' adalah 'Tarik'
  5. Tekan tombol 'Mirror repository'
  6. Tekan ikon sinkronisasi di sebelah entri yang muncul
aksh1618
sumber
Saya tidak memiliki lisensi Enterprise Edition, yaitu saya tidak dapat melihat "Mirroring repositories" dari langkah 3. Bagaimanapun, jika saya memiliki lisensi tersebut, dapatkah saya membuat mirror dari repositori GitHub milik orang lain?
Cimlman
1
@Cimlman Itu aneh, karena saya juga memiliki lisensi gratis. Mungkin periksa ulang? Harus menjadi yang ketiga di 'Pengaturan-> Repositori'. Untuk memperjelas: pengaturan di sidebar, bukan menu profil.
aksh1618
Setelah mengklik Pengaturan -> Repositori di bilah samping, saya dapat melihat bagian Cabang yang dilindungi, Tag yang Dilindungi, Menyebarkan Kunci, Menyebarkan Token.
Cimlman
2
@Cimlman Apakah Anda menggunakan instance gitlab kustom / lokal? Saya memiliki lebih banyak opsi di akun pribadi dan dasar saya di gitlab.com
aksh1618
1
Kami menggunakan instalasi swakelola, versi 10.7.2. Rilis terbaru adalah 11.6. Oke, ini poin yang bagus. :) Saya tidak dapat mencoba solusi Anda di GitLab kami. Bagaimanapun, masalahnya sudah usang bagi saya sekarang. Itu semua tentang perbaikan bug khusus kami dari perpustakaan pihak ketiga. Namun, perbaikan bug telah dimasukkan ke rilis resmi pustaka itu.
Cimlman
0

Mem-forking repositori github pribadi dimungkinkan.

  1. Klik proyek baru
  2. Pilih Impor
  3. Pilih github
  4. OAuth2 digunakan untuk mengautentikasi dan membuat aplikasi gitlab secara otomatis
  5. Pilih proyek untuk bercabang

^ Saya baru saja melakukan ini dengan repo pribadi di github, berhasil diimpor (termasuk cabang dll). Proyek yang diimpor secara otomatis dirahasiakan;)

Daithí
sumber
2
Impor proyek memerlukan "Token Akses Pribadi". Saya mencoba membuatnya di GitHub. Sepertinya fitur ini berguna ketika saya ingin membuat project di GitLab dari project saya di GitHub. Apakah asumsi ini benar? Pertanyaannya adalah tentang membagi proyek GitHub milik orang lain.
Cimlman
2
-1 karena, dan seperti yang dinyatakan di komentar sebelumnya, pertanyaannya adalah tentang membagi proyek github milik orang lain. Instruksi dalam jawaban ini tidak akan berfungsi dalam kasus seperti itu.
Nikos Alexandris
1
@NikosAlexandris apakah Anda yakin? Tidak dapatkah Anda membuat token akses untuk akun Anda dan mengakses repo orang lain yang akses baca Anda miliki? (Misalnya, setiap repo publik)
DGoiko
0

Alih-alih bercabang, Anda dapat mengimpor repositori GitHub yang tersedia untuk umum hanya dengan menggunakan antarmuka web:

  1. Dari dasbor GitLab Anda, klik Proyek baru
  2. Beralih ke proyek Impor tab
  3. Klik pada Repo by URL tombol
  4. Isi "Git repository URL" dan bidang proyek yang tersisa
  5. Klik Buat proyek untuk memulai proses impor
  6. Setelah selesai, Anda akan dialihkan ke proyek yang baru Anda buat

Menggunakan teknik ini baru-baru ini, dan ini berfungsi pada repositori publik apa pun bahkan tanpa akun GitHub. Lihat halaman dokumen GitLab ini untuk sumber info.

koceka
sumber
1
BAIK. Dan jika komit baru ditambahkan ke repositori asli di GitHub, dapatkah saya menggabungkan perubahan ke repositori di GitHub? Ini adalah operasi yang rumit dan mungkin tidak dapat dilakukan tanpa repositori perantara (lihat paragraf terakhir pertanyaan).
Cimlman