Zacząłem od pomysłu @ user292677 i udoskonaliłem go, aby rozwiązać mój problem:
- Utwórz nowe repozytorium na githubie.
- cd do lokalnej kopii starego repozytorium, z którego chcesz wyodrębnić, skonfigurowanego do śledzenia gałęzi nowego projektu, która stanie się głównym repozytorium nowego repozytorium .
$ git push https://github.com/accountname/new-repo.git +new-project:master
Nowe repozytorium Github zostało ukończone. Wynik to;
- nowe repozytorium Github o nazwie new-repo ,
- który
master
odpowiada nowemu projektowi starego repozytorium z
- cała historia zachowana.
W rzeczywistości odkryłem, że używając tej metody, mogę utworzyć nowe repozytorium z ręcznie wybranymi gałęziami, zmienionymi tak, jak chciałem:
$ git push [email protected]:accountname/new_repo +new-project:master +site3a:rails3
W rezultacie istniejąca wcześniej gałąź site3a została również przeniesiona do nowego repozytorium i pojawi się jako rails3 . Działa to naprawdę dobrze: schemat sieci pokazuje nowy master i rails3 z pełną historią oraz w ich prawidłowych relacjach ze sobą.
Aktualizacja 2013-12-07: Użyłem tego z innym projektem i zweryfikowałem, że ten przepis nadal działa.
Aktualizacja 2018-01-11: Zaktualizowano krok 3, aby użyć zalecenia GitHub dla protokołu https. Przepis nadal działa.
--follow-tags
.push
do lokalnego (tj.git init
Zamiast Github> New> ...)Aktualizacja:
cd do lokalnego repozytorium zawierającego old_branch i:
źródło
Edycja: w GitHub możesz „rozwidlić” repozytorium, a następnie przejść do karty Administrator w swoim klonie. Pod pozycjami „Nazwa repozytorium” i „Widoczność” znajduje się „Domyślna gałąź” z rozwijanym menu gałęzi. Wybierz
new-project
.Ponowna edycja: właśnie zdałem sobie sprawę, że to
master
gałąź, którą chcesz ustawić, a nie tylko gałąź „domyślna”. Więc…them/repo
doyou/repo
.git clone [email protected]:you/repo.git
gitk
.old-master
gałąź, aby nie stracić z oczu starych zatwierdzeń.]new-project
gałęzi, kliknij prawym przyciskiem myszy komunikat dotyczący zatwierdzenia i wybierz „Zresetuj gałąź główną do tego miejsca”. (Możesz to również zrobić w wierszu poleceń za pomocągit-reset
, ale nie wymyśliłem prawidłowego wywołania).Twoja następna push w górę do repozytorium GitHub będzie musiała zostać wykonana z
--force
opcją, ale w przeciwnym razie gotowe.Jeśli to jedno z Twoich własnych repozytoriów, robisz to, aby…
git clone [email protected]:you/orig.git
git clone orig copy
copy
repozytorium, zresetujmaster
gałąź do miejsca, w którym chcesz.you/copy
. Postępuj zgodnie ze wskazówkami na GitHub, aby skonfigurować ten projekt jako zdalny dla lokalnej wersjicopy
, pushmaster
i gotowe!źródło
I to wszystko. (Uwaga: zachowana historia git)
Wypróbowałem odpowiedź powyżej i stwierdziłem, że nie jest ona wystarczająco konkretna, ponieważ nie określała + master: master, czyli tego, czego potrzebowałem, aby działała. Działa świetnie.
Źródło (z moimi modyfikacjami w celu uniknięcia problemów z SSH w github): Mauricio Aiello, były starszy programista Java, https://www.quora.com/How-do-I-create-a-new-GitHub-repository-from-a -branch-in-an-existing-repository
źródło
Nie jestem pewien, czy to dobry sposób, ale i tak jest to łatwe:
Następnie utwórz nowe repozytorium na githubie i wypchnij je.
źródło
Pamiętając, że kiedy po prostu tworzysz nowe repozytorium, tracisz odniesienie do starego i utrudniasz utrzymanie aktualizacji oryginalnego projektu zsynchronizowanej z nowym. Może nie lepiej jest rozwidlić repozytorium?
źródło
Mały dodatek do poprawnej odpowiedzi:
$ git push [email protected]: nazwa_konta / new_repo + old_branch: master
"[email protected]: nazwa konta / new_repo" => pobierz z github "Klonuj lub pobierz" menu rozwijane
źródło