Skopiuj / podziel repozytorium git na github do tej samej organizacji

84

Mam repozytorium na Github, które zawiera aplikację internetową wdrożoną w dwóch różnych domenach. Aplikacja ma tu i tam niewielkie rozwidlenia logiczne, które zachowują się różnie w zależności od domeny, w której została wdrożona.

Doszło do punktu, w którym chcę podzielić to na dwa oddzielne repozytoria, po jednym dla każdej domeny.

Github nie pozwala mi podzielić tego na tę samą organizację. Wyszukiwanie „git duplicate repo” sugeruje, że powinienem go skopiować i przesłać kopię lustrzaną, ale wydaje się, że chodzi o utrzymanie synchronizacji obu repozytoriów, czego nie chcę robić.

Jak najlepiej to zrobić? Chciałbym, jeśli to możliwe, zachować starą historię zmian w nowej kopii.

jemminger
źródło
1
W rzeczywistości opcje git clone --barei git push --mirrorsą dokładnie tym, czego chcesz. Nie powoduje to synchronizacji obu repozytoriów. Ale zachowuje wszystko , w tym wszystkie gałęzie, tagi itp. Po prostu zrób to w katalogu tymczasowym, aby wykonać kopię. Następnie sklonuj nową kopię bezpośrednio ze swojego pilota w katalogu projektu.
vastlysuperiorman

Odpowiedzi:

104

Po prostu utwórz nowe repozytorium i wypchnij do niego z kopii roboczej:

git clone [email protected]:me/myrepo-original
cd myrepo-original
git remote set-url origin [email protected]:me/myrepo-new
git push origin master

Teraz masz nowe repozytorium myrepo-new, które jest identyczne z myrepo-original.

larsks
źródło
3
Ok, a te się nie śledzą, prawda? Co oznacza, że ​​stają się dwoma oddzielnymi, odłączonymi repozytoriami? To jest to czego chce.
jemminger
3
Żadne repozytorium nie zostanie zaktualizowane, chyba że wybierzesz pushje wyraźnie, a „nowe” repozytorium nie będzie wyświetlać żadnego związku ze starym.
larsks
Dzięki! Wygląda na to, że właśnie tego potrzebuję.
jemminger
3
Możesz też popchnąć wszystkie gałęzie:git push --all origin
Marius
To zadziałało dla mnie, ale musiałem zmienić na inny format adresu URL: $ git remote set-url github.com/me/myrepo-new.git
Enfors
15

Jeśli nie potrzebujesz relacji fork (np. Chcesz z jakiegoś powodu jakiegoś oddzielnego repozytorium alternatywnego), skopiowanie repozytorium jako konturów znalezionych przez Google i odpowiedź Larska jest w porządku.

Jeśli nie chcesz, aby to widelec, kontakt Github wsparcie ([email protected] lub https://github.com/support ) i będą tworzyć rozwidlenia w tej samej organizacji dla Ciebie. (Nie są też wybredni, wystarczy podać alternatywną nazwę repozytorium, ponieważ nazwy repozytoriów na koncie muszą być unikalne).


Aktualizacja : Użytkownik Steve Rice zgłosił w komentarzach poniżej, że obsługa GitHub stwierdziła, że ​​obsługa obecnie / nie skonfiguruje już drugiego rozwidlenia na koncie.

GitHub niedawno opublikował artykuł o możliwych alternatywach dla łączenia repozytorium na to samo konto. Możesz przeczytać ten artykuł tutaj .

Nevik Rehnel
źródło
4
Skontaktowałem się z pomocą techniczną, ich odpowiedź: „W tej chwili konto nie może posiadać dwóch repozytoriów w tej samej sieci”. Sugerują zamiast tego utworzenie repozytorium lustrzanego .
Steve Rice
ahw to jest do bani. przepraszam, nie wiedziałem, że zmienili swoje zasady :(
Nevik Rehnel
10

Użyj opcji Importuj repozytorium Github w menu + u góry strony lub po prostu otwórz

https://github.com/new/import

Spowoduje to utworzenie nowego repozytorium z dokładną zawartością skopiowanego repozytorium. Wadą (tak samo jak w przypadku odpowiedzi na polecenia git od Iarsksa ) jest to, że nie liczy się jako rozwidlenie dla Githuba.

sarob
źródło
W jaki sposób nie możesz sprawić, by ta opcja działała? Właśnie ją przetestowałem i działa w dwóch prostych krokach. Alternatywnie, utwórz lokalne repozytorium na githubie, a następnie użyj tam funkcji importu, np . Github.com/sarob/mytest/import .
sarob
To może być coś z naszym GHE w porównaniu z github.com, ale tam nie działa.
serraosays
4

Innym sposobem byłoby dodanie oryginalnego repozytorium do skopiowania jako zdalnego dla naszego bieżącego repozytorium.

#create a new repo in the org1 organization called myrepo-new

W lokalnym terminalu uruchom:

git clone [email protected]:org1/myrepo-new
cd myrepo-new
git remote -v #shows current repo link on github as origin
git remote add name-for-remote https://github.com/org1/repo-old
git remote -v #shows repo-old as name-for-remote
git fetch  name-for-remote
git merge name-for-remote/branch-to-get-from-remote
#Now fix any conflicts if present
#If number of files/commits is very high, the desktop client may hang when you try to commit your changes after merge. Try switching to Git Shell if this happens.
git status 
git commit -m "commit message"
git push origin master
Vinay Vemula
źródło
1

Alternatywne rozwiązanie:

Utwórz nową organizację i tam ją rozwidl. Jeśli repozytorium jest prywatne, pozostanie prywatne również w nowej organizacji. Następnie możesz dać dostęp zewnętrznym deweloperom lub komukolwiek, komu chcesz, do rozwidlonego repozytorium, a oni mogą podnieść PR z powrotem do pierwotnego repozytorium.

csaboable
źródło
-2

Nie mógłbyś po prostu zduplikować folderu lokalnego, usunąć rzeczy git:

rm -rf .git*

Następnie utworzyć nowe repozytorium w tym folderze? Wydaje się czystsze i łatwiejsze.

Ben Wilson
źródło
2
Usunięcie ./.git/nie pomogłoby w deklarowanym przez PO zamiar „zachowania starej historii zmian w nowej kopii, jeśli to możliwe”.
MarkHu