Rozwidlenie z GitHub do Bitbucket


161

Pracuję nad projektem opartym na CakePHP , który jest hostowany na GitHubie . Mój projekt jest hostowany na Bitbucket . Obaj używają git . Zasadniczo chciałbym utworzyć „widelec” (nie wiem, czy używam właściwych terminów, ponieważ jestem nowy w git ) CakePHP w moim repozytorium Bitbucket, aby móc uzyskać aktualizacje bez potrzeby ściągania wszystkich zip / tar CakePHP i zastępowania folderu, a następnie zatwierdzania i wypychania, ale może z 'merge' (?).


5
Zobacz stackoverflow.com/questions/1811730/…, aby poznać dobre podejście do tego rodzaju przepływu pracy.
— Dolbz

@Dolbz, wydaje mi się, że to jest właściwe, czego potrzebuję, dziękuję!
— entropid

Odpowiedzi:


144

Obecnie nie jest możliwe wysłanie „żądania ściągnięcia” do różnych witryn. Dodałem w tym celu prośbę o funkcję w narzędziu do śledzenia problemów Bitbucket: # 3288 . Sugeruję dodanie siebie jako obserwującego, jeśli chcesz to śledzić.

Jednak nadal możesz przenieść źródło z GitHub do Bitbucket bez konieczności pobierania jakichkolwiek plików zip lub tarballi. Tworzysz klon z GitHub i wypychasz do Bitbucket:

$ git clone https://github.com/cakephp/cakephp
$ cd cakephp
$ git push git@bitbucket.org:mg/cakephp.git master

mg/cakephpNajpierw utworzyłem jako puste repozytorium Git w Bitbucket. W ten sposób możesz push / pull zestawy zmian z GitHub do Bitbucket.


3
Więc jak możemy wyciągnąć z wyższego biegu?
— Ruchir Shukla

1
@RuchirShukla: w zasadzie w ten sam sposób. Musisz przenosić zatwierdzenia przez własną maszynę, wyciągając je ze swojego wyższego poziomu. Następnie przesyłasz to do innej witryny hostingowej, synchronizując w ten sposób oba.
— Martin Geisler,

4
To działało świetnie dla mnie, z wyjątkiem tego, że musiałem cd cakephpmiędzy tymi dwoma poleceniami. Oczywiście dla początkujących, tak, ale początkujący mogą się zastanawiać, dlaczego to nie działa.
— aaronbartell

Czy możesz nakręcić film na YouTube, aby to zademonstrować? Nie mogłem tego powtórzyć. Byłem w stanie wykonać te instrukcje, ale kiedy wciskam i zatwierdzam, nadal próbuje przekazać je do mastera zamiast do rozwidlonej gałęzi.
— Wax

To nie działa jako fork. Gałęzie i tagi NIE są kopiowane do BitBucket.
— Joel Karunungan

81

Poniższy przepływ pracy dodaje repozytorium github jako nowy pilot o nazwie synci zdalny bitbucket jako origin. Dodaje również gałąź wywoływaną githubdo śledzenia repozytorium github i gałąź wywoływaną masterdo śledzenia repozytorium bitbucket. Zakłada się, że masz repozytorium bitbucket o nazwie „myrepository”, które jest puste.

Konfiguruj piloty

# setup local repo
mkdir myrepository
cd myrepository
git init

# add  bitbucket remote as "origin"
git remote add origin ssh://git@bitbucket.org/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

Skonfiguruj gałęzie

# 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

Teraz powinieneś mieć lokalny githuboddział śledzący gałąź repozytorium github master. Powinieneś mieć lokalny masteroddział śledzący repozytorium bitbucket ( masterdomyślnie oddział).

Ułatwia to wyciągnięcie githubgałęzi, a następnie scalenie tych zmian z mastergałęzią (chociaż preferowane masterjest ponowne bazowanie zamiast scalania), a następnie możesz wypchnąć gałąź (wypchnie ją do bitbucket).


To nie działa, ale to dobry pomysł. Zresztą, żeby to naprawić, żeby działało?
— bozdoz

Lokalna gałąź github śledzi zdalną gałąź główną github, a następnie pchasz do zdalnego mastera bitbucket? Kiedy następuje push to github? @aleemb
— bozdoz

1
W Git 2.2.1 --set-upstreamjest przestarzałe ... Ale to działa tak długo, jak długo tworzysz githubgałąź przed próbą ustawienia repozytorium nadrzędnego.
— Ken Prince

3
Zamiast robićgit fetchgit branch --track github sync/master
— set

3
Myślę, że brakuje polecenia git checkout githubi git checkout -b masterpo poleceniu git branch. git branch -a
— Skończysz

31

Jeśli chcesz aktualizować swoje repozytorium, użyj dwóch pilotów: Github ( upstream) i Bitbucket ( origin) w ten sposób:

# 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

Aby pobrać aktualizacje CakePHP z Github:

git pull upstream master

Aby przekazać zmiany kodu do Bitbucket:

git push origin master

Myślę, że miałeś na myśli "git clone mybitibucket / cakephp / cakephp " w pierwszym git poleceniu, prawda? To jest droga do zrobienia ....
— ribamar

To jest po prostu świetne! Wielkie dzięki! Bardzo cenione
— Aakanksha

To też nie działa. Gałęzie i tagi nie są uwzględniane w Bitbucket.
— Joel Karunungan

@JoelKarunungan Dobra uwaga! Do pchania wszystkiego, w tym oddziałów i znaczniki, myślę, że to powinno działać: git push --all --mirror origin. Zaktualizowano odpowiedź.
— Zubin

@Zubin próbowałeś tego? fatal: --all and --mirror are incompatible Ponadto: git pull upstream mastergeneruje błąd krytyczny. fatal: Couldn't find remote ref master
— Joel Karunungan,

14

Tworząc nowe repozytorium w BitBucket, kliknij przycisk Import repositoryw prawym górnym rogu. Wprowadź adres URL https znaleziony po kliknięciu Clone or downloadw Github dla repozytorium, które chcesz rozwidlić.

Nadaj nazwę repozytorium, skonfiguruj ustawienia prywatności i gotowe!


1
To klonowanie, a nie rozwidlanie, a to inna sprawa.
— entropid

7
Od teraz funkcja jest oznaczona jako „Repozytorium importu” w usłudze Bitbucket.
— Wild Pottok

1
@entropid a fork jest klonem oryginalnego repozytorium. W świecie git, Forking == cloning
— enorl76

@ enorl76 Nie szczególnie, jeśli chodzi o ogólne zastosowanie.
— Rig

2
@ enorl76 tak, technicznie jest. Ale fork jest sposobem na utrzymanie "połączenia" klonu z oryginalnym repozytorium, aby uzyskać z niego aktualizację i ostatecznie ją przepchnąć. To tutaj połączenie powiązań „pochodzenia” i „upstream” zaczyna odgrywać fundamentalną rolę. Github i Bitbucket stworzyli następnie cały zestaw narzędzi, aby zwiększyć produktywność i przyjazność fork, np. „Żądanie push” :)
— Dan Niero

0

Domyślam się, że chcesz po prostu łatwo pobrać repozytorium ze swoim projektem ... i NIE będziesz wnosić ciastaPHP, prawda?

jeśli tak, wystarczy dodać odwołanie zewnętrzne do repozytorium.

SVN: zewnętrzny odpowiednik w GIT?

A później, nawet jeśli chcesz wnieść swój wkład w cakePHP, możesz to zrobić w oryginalnym repozytorium.


0

Zauważyłem, że od odpowiedzi @Martin Geisler, Bitbucket włączył funkcję importowania repozytoriów z github.com

Udało mi się pomyślnie zaimportować prywatne repozytorium z github.com do prywatnego repozytorium na bitbucket.org

Oto kroki :

  1. Kliknij przycisk Utwórz i wybierz Repozytorium („+”> Repozytorium)
  2. Teraz, zamiast tworzyć nowe repozytorium, wybierz repozytorium importu z prawego górnego rogu okna modalnego, które się pojawi.
  3. wypełnij adres URL repozytorium github i dane uwierzytelniające w nowym module do importowania repozytorium.
  4. Otóż ​​to. Wszystko bezproblemowo importuje się do bitbucketa z githuba.

Zwróć uwagę na link do repozytorium importu w prawym górnym rogu zrzutu ekranu

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.