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.


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 git@github.com:me/myrepo-original
cd myrepo-original
git remote set-url origin git@github.com:me/myrepo-new
git push origin master

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


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 (support@github.com 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 .


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.


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 git@github.com: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

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.


-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.


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
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.