Rozwidlenie repozytorium Git z GitHub do GitLab

94

Załóżmy, że chciałbym zaimplementować poprawkę do projektu innej osoby. Ten projekt znajduje się na GitHub.

Mógłbym stworzyć rozwidlenie w GitHub i zaimplementować poprawkę.

Chciałbym jednak stworzyć swój fork na GitLab, a nie na GitHubie.

Czy to jest możliwe? W jaki sposób?

Przeczytałem ten artykuł: https://about.gitlab.com/2016/12/01/how-to-keep-your-fork-up-to-date-with-its-origin/

W każdym razie nie jestem pewien, co powinienem zrobić w moim przypadku.

  • Czy powinienem po prostu jakoś utworzyć fork w GitLab projektu z GitHub?
  • Czy powinienem utworzyć kopię lustrzaną projektu z GitHub na GitLab?
  • A może powinienem utworzyć lustro w GitLab, a następnie rozwidlić lustro?
  • A może powinienem zrobić coś zupełnie innego?

Jakie jest prawidłowe podejście.

Dzięki.

AKTUALIZACJA

Dublowanie repozytorium w GitLab prawdopodobnie nie ma sensu. Mogę stworzyć kopię lustrzaną mojego repozytorium GitHub na GitLab, ale nie mogę utworzyć kopii lustrzanej repozytorium innej osoby.

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

Oto, co zrobiłem do tej pory:

Sklonowałem oryginalny projekt GitHub na mój komputer lokalny. Zatwierdziłem poprawkę do nowej gałęzi w moim lokalnym repozytorium. Stworzyłem pusty projekt na GitLab. Ustawiłem źródło w moim lokalnym repozytorium na ten pusty projekt w GitLab i przekazałem obie gałęzie do GitLab. Skonfigurowałem powyżej w moim lokalnym repozytorium do repozytorium GitHub.

Kiedy chcę uzyskać nowe zatwierdzenia z oryginalnego repozytorium GitHub do repozytorium na GitLab (tj. Zsynchronizować repozytoria), mogę to zrobić, używając mojego lokalnego repozytorium jako kroku pośredniego. Jednak nie ma bezpośredniego połączenia między repozytorium w GitHub a repozytorium w GitLab. Czy moja konfiguracja jest prawidłowa? Czy jest jakaś różnica, jeśli zrobię rozwidlenie w GitHub?

Cimlman
źródło

Odpowiedzi:

124

Jeśli chcesz tylko śledzić zmiany, najpierw utwórz puste repozytorium w GitLab (lub czymkolwiek innym, z którego możesz korzystać) i sklonuj je na swój komputer.

Następnie dodaj projekt GitHub jako pilota „ nadrzędnego ” za pomocą:

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

Teraz możesz pobierać i pobierać z górnego strumienia, jeśli nastąpią jakieś zmiany. (Możesz również wcisnąć lub scalić go, jeśli masz prawa dostępu.)

git pull upstream master

Na koniec wróć do własnego repozytorium GitLab:

git push origin master

Jeśli nie chcesz ręcznie pobierać źródła / wypychania, GitLab oferuje możliwość dublowania w Ustawienia => Repozytorium => Dublowanie repozytoriów.

Chris Watts
źródło
15
Chciałbym tylko uzupełnić tę odpowiedź, dlaczego jest to właściwe podejście. „Rozwidlenie” to koncepcja stworzona przez GitHub, dlatego istnieje tylko na GitHub, ale jest przydatna. Jeśli weźmiesz pod uwagę czysty git (jak czysty serwer git działający gdzieś w twojej sieci), byłoby to jak sklonowanie repozytorium na własny serwer, a następnie sklonowanie go na lokalny komputer. Dodałbyś wtedy oryginalne repozytorium jako zewnętrzne lokalnie. Wierzę, że to właśnie robi GitHub za kulisami.
Bruno Finger
9
Tylko dodać, że rozwidlania nie istnieje na GitLab, patrz tutaj dla przykładu.
bellackn,
1
Musiałem użyć: pull upstream master --allow-unrelated-histories
hmojtaba
Jak później przesłać żądanie ściągnięcia?
Erik Aronesty
1
@ErikAronesty To trudniejsze, ponieważ „pull requesty” nie są gitem, a raczej GitHubem. Jednym ze sposobów na zrobienie tego jest jednak rozwidlenie kopii na GitHub i dodanie swojego rozwidlonego repozytorium jako innego pilota, powiedzmy git remote add upstream-fork [email protected]:myuser/repo. Wtedy to tylko kwestia git push upstream-fork masteri prześlij żądanie ściągnięcia za pośrednictwem witryny GitHub.
Chris Watts
17

Sposób dostępny tylko w przeglądarce:

  1. Utwórz nowy projekt w Gitlab (wystarczy pusty projekt z nazwą)
  2. Przejdź do Ustawienia -> Magazyn
  3. Wprowadź adres URL GitHub w sekcji „Repozytoria kopii lustrzanych”
  4. Upewnij się, że „Kierunek lustra” to „Pociągnij”
  5. Naciśnij przycisk „Mirror repozytorium”
  6. Naciśnij ikonę synchronizacji obok wpisu, który się pojawi
aksh1618
źródło
Nie mam licencji Enterprise Edition, tj. Nie widzę „Mirroring repozytoriów” z kroku 3. W każdym razie, gdybym miał taką licencję, czy mógłbym stworzyć kopię lustrzaną repozytorium GitHub innej osoby?
Cimlman,
1
@Cimlman To dziwne, ponieważ jestem również na wolnej licencji. Może sprawdź ponownie? Powinien być trzeci w „Ustawieniach-> Repozytorium”. Dla jasności: ustawienia na pasku bocznym, a nie menu profilu.
aksh1618
Po kliknięciu Ustawienia -> Repozytorium na pasku bocznym, widzę sekcje Chronione gałęzie, Chronione tagi, Wdrażanie kluczy, Wdrażanie tokenów.
Cimlman,
2
@Cimlman Czy używasz niestandardowej / lokalnej instancji gitlab? Mam o wiele więcej opcji na moim osobistym, podstawowym koncie na gitlab.com
aksh1618
1
Używamy samodzielnej instalacji w wersji 10.7.2. Najnowsza wersja to 11.6. OK, to dobra uwaga. :) Nie mogę wypróbować Twojego rozwiązania na naszym GitLabie. W każdym razie problem jest dla mnie teraz przestarzały. Chodziło o naszą niestandardową naprawę błędów biblioteki innej firmy. Jednak poprawka błędu została już włączona do oficjalnego wydania tej biblioteki.
Cimlman,
0

Możliwe jest rozwidlenie prywatnego repozytorium github.

  1. Kliknij nowy projekt
  2. Wybierz Importuj
  3. Wybierz github
  4. OAuth2 służy do uwierzytelniania i automatycznego tworzenia aplikacji gitlab
  5. Wybierz projekt do rozwidlenia

^ Właśnie to zrobiłem z prywatnym repozytorium na github, pomyślnie zaimportowałem (gałęzie inc itp.). Zaimportowany projekt jest automatycznie utrzymywany jako prywatny;)

Daithí
źródło
2
Import projektu wymaga „Osobistego tokena dostępu”. Próbowałem wygenerować jeden na GitHub. Wygląda na to, że ta funkcja jest przydatna, gdy chcę stworzyć projekt na GitLab z mojego projektu na GitHub. Czy to założenie jest słuszne? Pytanie dotyczy rozwidlenia projektu GitHub innej osoby.
Cimlman,
2
-1, ponieważ, jak stwierdzono w poprzednim komentarzu, chodzi o rozwidlenie projektu github innej osoby. W takim przypadku instrukcje zawarte w tej odpowiedzi nie będą działać.
Nikos Alexandris,
1
@NikosAlexandris czy na pewno? Nie możesz utworzyć tokena dostępu do swojego konta i uzyskać dostępu do repozytorium innej osoby, do którego masz uprawnienia do odczytu? (na przykład każde publiczne repozytorium)
DGoiko
0

Zamiast rozwidlać, możesz zaimportować dowolne publicznie dostępne repozytorium GitHub, używając tylko interfejsu internetowego:

  1. Na pulpicie nawigacyjnym GitLab kliknij Nowy projekt
  2. Przejdź do zakładki Importuj projekt
  3. Kliknij na Repo przez URL przycisku
  4. Wypełnij „URL repozytorium Git” i pozostałe pola projektu
  5. Kliknij Utwórz projekt, aby rozpocząć proces importowania
  6. Po zakończeniu zostaniesz przekierowany do nowo utworzonego projektu

Użyłem tej techniki niedawno i działa w każdym publicznym repozytorium, nawet bez konta GitHub. Źródło informacji można znaleźć na tej stronie dokumentacji GitLab .

koceka
źródło
1
OK. A jeśli nowe zatwierdzenia zostaną dodane do oryginalnego repozytorium na GitHub, czy mogę po prostu scalić zmiany w repozytorium na GitHub? Jest to trudna operacja i być może nie da się jej wykonać bez pośredniego repozytorium (patrz ostatni akapit pytania).
Cimlman