Przenieś repozytoria git z GitLab do GitHub - czy możemy, jak i pułapki (jeśli istnieją)?

204

W razie potrzeby można przenieść repozytoria z GitLab do GitHub. Jeśli tak, to jak dokładnie mogę zrobić to samo?

Czy są też jakieś pułapki lub środki ostrożności, o których należy pamiętać przed podjęciem takich działań, biorąc pod uwagę, że mogę zdecydować o ich przeniesieniu do GitHub (ponieważ w tej chwili ma więcej funkcji, które mogą być przydatne dla mojego projektu) ).

boddhisattwa
źródło

Odpowiedzi:

210

Możesz je przenieść (po prostu dodając pilota do repozytorium GitHub i naciskając je)

  • utwórz puste repozytorium na GitHub
  • git remote add github https://[email protected]/yourLogin/yourRepoName.git
  • git push --mirror github

Historia będzie taka sama.

Ale utracisz kontrolę dostępu (zespoły zdefiniowane w GitLab z określonymi prawami dostępu do twojego repozytorium)

Jeśli napotkasz problem z adresem URL https repozytorium GitHub:

The requested URL returned an error: 403

Wszystko, co musisz zrobić, to wprowadzić hasło do GitHub, ale OP sugeruje:

Może być konieczne popchnięcie go do ssh. Możesz przeczytać więcej o tym, jak to zrobić tutaj.

Zobacz „ Przekazywanie do Gita zwracające kod błędu 403 krytyczny: żądanie HTTP nie powiodło się ”.

VonC
źródło
Dzięki Von - twoja odpowiedź załatwiła sprawę. Właśnie dodałem trochę do twojej odpowiedzi dotyczącej dokładnego git zdalnego dodania cmd i pchania rzeczy po ssh, jeśli to konieczne. Mam nadzieję, że w porządku.
boddhisattva
@boddhisattva Jest w porządku, ale widzę, że twoja edycja została odrzucona. Sam dodałem go ponownie w odpowiedzi.
VonC
5
Wszelkie uwagi na temat importowania problemów i etykiet? Czy cokolwiek innego niż kod można importować za pomocą metody pull and push? Dzięki.
@YakovK Nie jestem świadomy automatycznego procesu uwzględniającego PR i problemy. Przynajmniej PR w GitHub to gałęzie (patrz stackoverflow.com/a/30542987/6309 ), więc można je zaimportować.
VonC
1
@kiki wypchnie wszystkie lokalne gałęzie, ale jeśli samo lokalne repo jest klonem, będzie miało tylko master jako domyślną lokalną gałąź wypisaną. Przed użyciem należy najpierw utworzyć inne lokalne gałęzie po ich powtarzalnych gałęziach zdalnego śledzenia push --mirror. stackoverflow.com/a/18911322/6309 . Zobacz także alternatywę wymienioną na stackoverflow.com/a/24099141/6309 (ostatnie zdanie)
VonC
149

Jest to bardzo łatwe dzięki funkcji importu repozytorium Zaloguj się do github.com,

Po stronie zdjęcia profilowego +kliknij przycisk, a następnie pojawi się opcja import repository. znajdziesz taką stronę. wprowadź opis zdjęcia tutaj Wymagany jest adres URL twojego starego repozytorium, który w twoim przypadku jest URL repozytorium gitlab. następnie wybierz Właściciel, a następnie wpisz nazwę tego repozytorium i kliknij, aby rozpocząć importowanie przycisku.

manoj
źródło
33
To bardzo wygodne, że GitHub to dodał. Jednak nie będzie działać, jeśli jest to wewnętrzny GitLab za zaporą ogniową, co stanowi duży przypadek użycia GitLab.
abalter
7
Krótka notatka dla każdego, kto korzysta z opcji importu. Musiałem wyłączyć MFA w GitLab, aby to działało.
D-Day
2
To działa dobrze. Znacznie lepsza niż zaakceptowana odpowiedź
LnxSlck,
Jak jeśli chcę zaimportować oddział?
coderInrRain
1
Zaimportowane repozytorium niekoniecznie musi być teraz publiczne, ponieważ github zwolnił dodawanie prywatnych repozytoriów.
Shrey Garg
7

Miałem odwrotny problem i ostatecznie musiałem stworzyć własny skrypt powłoki bash, aby firma mogła migrować setki repozytoriów z Github do Gitlab z powodu zmiany polityki firmy.
Skrypt korzysta z interfejsu API Gitlab do zdalnego tworzenia repozytorium i wsuwa do niego repozytorium Github. Nie ma jeszcze pliku README.md, ale sh jest dobrze udokumentowany.
To samo można zrobić odwrotnie, jak sobie wyobrażam. Mam nadzieję, że to może pomóc.
https://github.com/mahmalsami/migrate-github-gitlab/blob/master/migrate.sh

SamiX
źródło
2

Jeśli masz włączone MFA na GitLab, powinieneś przejść do Ustawienia repozytorium / Repozytorium -> Wdróż klucze i utwórz go, a następnie użyj go jako loginu podczas importowania repo na GitHub

Alex Mokrushin
źródło