Git deposunu GitHub'dan GitLab'a çatallama


95

Başka birinin projesine bir düzeltme uygulamak istediğimi varsayalım. Bu proje GitHub'da bulunuyor.

GitHub'da bir çatal oluşturabilir ve düzeltmeyi uygulayabilirim.

Ancak çatalımı GitHub yerine GitLab'da oluşturmak istiyorum.

Mümkün mü? Nasıl?

Bu makaleyi okudum: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

Her neyse, benim durumumda ne yapmam gerektiğinden emin değilim.

  • Bir şekilde GitHub'dan projenin GitLab'ında bir çatal oluşturmalı mıyım?
  • Yoksa GitHub'dan projenin GitLab'ında bir ayna mı oluşturmalıyım?
  • Yoksa GitLab'da bir ayna oluşturmalı ve ardından aynayı çatallamalı mıyım?
  • Yoksa tamamen farklı bir şey mi yapmalıyım?

Doğru yaklaşım nedir?

Teşekkürler.

GÜNCELLEME

GitLab'da depo aynalama muhtemelen mantıklı değil. GitLab'da GitHub depomun bir yansımasını oluşturabilirim, ancak başka birinin havuzunun aynasını oluşturamıyorum.

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

Şimdiye kadar yaptığım şey bu:

Orijinal GitHub projesini yerel makineme klonladım. Düzeltmeyi yerel depomdaki yeni bir şubeye taahhüt ettim. GitLab üzerinde boş bir proje oluşturdum. Yerel depomdaki orijini GitLab'daki boş projeye ayarladım ve her iki dalı da GitLab'a ittim. Yerel depomda GitHub deposuna yukarı akışı ayarladım.

Orijinal GitHub deposundan GitLab üzerindeki depoya yeni taahhütler almak istediğimde (yani depoları senkronize et), bunu yerel depomu bir ara adım olarak kullanarak yapabilirim. Ancak, GitHub'daki depo ile GitLab'daki depo arasında doğrudan bir bağlantı yoktur. Kurulumum doğru mu? GitHub'da çatal yaparsam herhangi bir fark olur mu?

Yanıtlar:


126

Yalnızca değişiklikleri izlemek istiyorsanız, önce GitLab'da (veya kullanıyor olabileceğiniz başka bir şey) boş bir depo oluşturun ve onu bilgisayarınıza klonlayın.

Ardından GitHub projesini " yukarı akış " uzaktan kumandası olarak ekleyin :

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

Artık herhangi bir değişiklik olması durumunda yukarı akıştan alabilir ve çekebilirsiniz. (Erişim haklarınız varsa, onu da itebilir veya birleştirebilirsiniz.)

git pull upstream master

Son olarak, kendi GitLab deponuza geri gidin:

git push origin master

Yukarı akış / itme kaynağını manuel olarak çekmek istemiyorsanız GitLab, Ayarlar => Depo => Depoları Yansıtma'da bir yansıtma yeteneği sunar.


15
Bunun neden doğru yaklaşım olduğuna dair bu yanıtı tamamlamak istiyorum. "Çatallama" GitHub tarafından oluşturulan bir kavramdır, bu nedenle yalnızca GitHub'da mevcuttur, yine de yararlıdır. Saf git'i düşünürseniz (ağınızda bir yerde çalışan saf bir git sunucusu gibi), bu depoyu kendi sunucunuza klonlamak ve ardından bunu yerel bilgisayarınıza klonlamak gibi olur. Orijinal depoyu yerel olarak yukarı akış olarak eklersiniz. GitHub'ın perde arkasında yaptığının bu olduğuna inanıyorum.
Bruno Finger

9
Sadece bu çatallaşma eklemek istediğiniz yapar GitLab mevcut, bkz burada örneğin.
bellackn

1
Kullanmam gerekiyordu: upstream master --allow-unrelated-histories
hmojtaba

Bir çekme talebini daha sonra nasıl gönderirsiniz?
Erik Aronesty

1
@ErikAronesty "Çekme İstekleri" bir git değil, GitHub olayı olduğundan bu daha yanıltıcıdır. Bunu yapmanın bir yolu, GitHub'da bir kopyasını çatallamak ve çatallı deponuzu başka bir uzaktan kumanda olarak eklemektir git remote add upstream-fork git@github.com:myuser/repo. O zaman bu sadece bir mesele git push upstream-fork masterve çekme isteğinizi GitHub sitesi aracılığıyla gönderin.
Chris Watts

18

Yalnızca tarayıcıya özgü yol:

  1. Gitlab'da yeni bir proje oluşturun (Sadece adı olan boş bir proje yeterli)
  2. Ayarlar -> Respository'ye gidin
  3. 'Yansıtma havuzları' altında GitHub URL'sini girin
  4. "Ayna yönü" nün "Çekme" olduğundan emin olun
  5. 'Depoyu yansıt' düğmesine basın
  6. Görünen girişin yanındaki senkronizasyon simgesine basın

Enterprise Edition lisansım yok, yani 3. adımdan itibaren "Yansıtma havuzlarını" göremiyorum. Her neyse, böyle bir lisansa sahip olsaydım, başka birinin GitHub deposunun aynasını oluşturabilir miyim?
Cimlman

1
@Cimlman Bu garip, çünkü ben de özgür bir lisans sahibiyim. Belki yeniden kontrol edin? 'Ayarlar-> Depo'da üçüncü olmalıdır. Açık olmak gerekirse: profil menüsündeki değil kenar çubuğundaki ayarlar.
aksh1618

Kenar çubuğunda Ayarlar -> Depo seçeneğini tıkladıktan sonra Korumalı Dallar, Korumalı Etiketler, Anahtarları Dağıt, Belirteçleri Dağıt bölümlerini görebiliyorum.
Cimlman

2
@Cimlman Özel / yerel bir gitlab örneği mi kullanıyorsunuz? Gitlab.com'daki kişisel, temel hesabımda daha birçok seçeneğim var
aksh1618

1
Kendi kendini yöneten bir kurulum olan 10.7.2 sürümünü kullanıyoruz. En son sürüm 11.6'dır. Tamam, bu iyi bir nokta. :) Çözümünüzü GitLab'ımızda deneyemiyorum. Her neyse, sorun artık benim için modası geçmiş. Her şey 3. taraf kitaplıktaki özel hata düzeltmemizle ilgiliydi. Ancak, hata düzeltmesi bu kütüphanenin resmi sürümüne zaten dahil edildi.
Cimlman

0

Özel bir github deposunu çatallamak mümkündür.

  1. Yeni projeye tıklayın
  2. İçe Aktar'ı seçin
  3. GitHub seçin
  4. OAuth2 gitlab uygulamasını doğrulamak ve otomatik oluşturmak için kullanılır
  5. Çatallanacak projeyi seçin

^ Bunu github'da özel bir repo ile yaptım, başarıyla içe aktarıldı (inc şubeleri vb.) İçe aktarılan proje otomatik olarak gizli tutulur;)


2
Proje içe aktarma bir "Kişisel Erişim Simgesi" gerektirir. GitHub'da bir tane oluşturmaya çalıştım. GitHub'daki projemden GitLab üzerinde bir proje oluşturmak istediğimde bu özellik kullanışlı görünüyor. Bu varsayım doğru mu? Soru, başka birinin GitHub projesini çatallamakla ilgili.
Cimlman

2
-1 çünkü ve önceki yorumun da belirttiği gibi, soru başka birinin github projesini çatallamakla ilgili. Bu cevaptaki talimatlar böyle bir durumda işe yaramayacaktır.
Nikos Alexandris

1
@NikosAlexandris emin misin? Hesabınız için bir erişim jetonu oluşturup okuma erişimine sahip olduğunuz başka birinin deposuna erişemez misiniz? (örneğin, her bir halka açık depo)
DGoiko

0

Çatallamak yerine, yalnızca web arayüzünü kullanarak herkese açık herhangi bir GitHub deposunu içe aktarabilirsiniz:

  1. GitLab kontrol panelinizden tıklayın Yeni
  2. Geçiş İthalat projesi sekmesine
  3. URL ile Repo'ya tıklayın düğmesi
  4. "Git veri havuzu URL'sini" ve kalan proje alanlarını doldurun
  5. İçe aktarma işlemine başlamak için Proje oluştur'a tıklayın
  6. Tamamlandığında, yeni oluşturduğunuz projeye yönlendirileceksiniz

Bu tekniği yakın zamanda kullandı ve bir GitHub hesabı olmasa bile herhangi bir genel depoda çalışıyor. Bilgi kaynağı için bu GitLab belgeleri sayfasına bakın .


1
TAMAM. Ve GitHub'daki orijinal depoya yeni taahhütler eklenirse, değişiklikleri GitHub'daki depoda birleştirebilir miyim? Bu karmaşık bir işlemdir ve belki ara depo olmadan yapılamaz (sorunun son paragrafına bakın).
Cimlman
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.