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' (?).

entropid
źródło
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 [email protected]: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.

Martin Geisler
źródło
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://[email protected]/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).

aleemb
źródło
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
Zubin
źródło
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!

shmuli
źródło
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.

gcb
źródło
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

de1123bu58nk
źródło