Mam serwer, który usuwam. Do migracji pozostało mi tylko moje repozytorium. Ten serwer jest wymieniony jako źródło (master) dla jednego z moich projektów. Jaki jest właściwy sposób przeniesienia repozytorium w celu zachowania historii.
Mam serwer, który usuwam. Do migracji pozostało mi tylko moje repozytorium. Ten serwer jest wymieniony jako źródło (master) dla jednego z moich projektów. Jaki jest właściwy sposób przeniesienia repozytorium w celu zachowania historii.
Odpowiedzi:
Aby dodać nową lokalizację repozytorium,
git remote add new_repo_name new_repo_url
Następnie wypchnij zawartość do nowej lokalizacji
git push new_repo_name master
Na koniec usuń stary
git remote rm origin
Następnie możesz zrobić to, co powiedział bdonlan i edytować plik.git / config, aby zmienić new_repo_name na origin. Jeśli nie usuniesz źródła (oryginalne zdalne repozytorium), możesz po prostu wcisnąć zmiany do nowego repozytorium za pomocą
git push new_repo_name master
git push -u new_repo_name --all.
git remote rename new_repo_name origin
Jeśli chcesz migrować wszystkie gałęzie i tagi, powinieneś użyć następujących poleceń:
git clone --mirror [oldUrl]
sklonować stare repozytorium ze wszystkimi gałęziami
cd the_repo
git remote add remoteName newRepoUrl
skonfigurować nowego pilota
git push -f --tags remoteName refs/heads/*:refs/heads/*
wcisnąć wszystkie referencje pod referencje / głowy (prawdopodobnie tego właśnie chcesz)
--tagsi refs/heads/*:refs/heads/*nie jest z nimi zgodny --mirror. stackoverflow.com/a/26552740/1484831 działał dobrze.
refs/heads/refs/headsużyciem git push -f --tags remoteName refs/heads/*:refs/heads/*więc mam zamienione nagit push remoteName --mirror
pushobsługuje również --mirror. git clone --mirror; cd repo; git push --mirror new_remotepowinien załatwić
To działało dla mnie bezbłędnie .
git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin
Muszę jednak wspomnieć, że tworzy to lustro bieżącego repozytorium, a następnie wypycha je do nowej lokalizacji. Dlatego może to zająć trochę czasu w przypadku dużych repozytoriów lub wolnych połączeń .
git push --mirror originponad -f.
Skopiuj to. To naprawdę takie proste. :)
Po stronie klienta po prostu edytuj .git / config w lokalnym repozytorium klienta, aby w razie potrzeby skierować piloty na nowy adres URL.
Odbywa się to częściowo w niektórych innych odpowiedziach.
git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
--mirrorw push jest bardzo ważne: to powinna być poprawna odpowiedź
git init --bare
Po prostu odkładam to, co powiedzieli inni, na prostej liście instrukcji.
Przenieś repozytorium: Zaloguj się do nowego serwera, cddo katalogu nadrzędnego, w którym chcesz teraz przechowywać repozytorium, i użyj rsyncdo skopiowania ze starego serwera:
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
Spraw, aby klienci wskazywali nowe repozytorium: Teraz na każdym kliencie korzystającym z repozytorium wystarczy usunąć wskaźnik do starego źródła i dodać jeden do nowego.
client> git remote rm origin
client> git remote add origin user@new.server.com:path/to/repository.git
git remote set-url origin user@new.server.com:path/to/repository.git
Spójrz na ten przepis na GitHub: https://help.github.com/articles/importing-an-external-git-repository
Wypróbowałem kilka metod, zanim odkryłem git push --mirror.
Działa jak urok!
git clone --mirror ..., git remote add ...,git push --mirror ...
Postępowałem zgodnie z instrukcjami na BitBucket, aby przenieść repo ze wszystkimi jego oddziałami. Oto kroki z objaśnieniami po #znaku:
cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go
Pracował dla mnie ładnie.
Jest to odmiana tej odpowiedzi , obecnie sugerowana przez gitlab do „migracji” repozytorium git z jednego serwera na drugi.
Załóżmy, że twój stary projekt nazywa się existing_repoi jest przechowywany w existing_repofolderze.
Utwórz repo na nowym serwerze. Zakładamy, że adres URL nowego projektu togit@newserver:newproject.git
Otwórz interfejs wiersza polecenia i wprowadź następujące dane:
cd existing_repo
git remote rename origin old-origin
git remote add origin git@newserver:newproject.git
git push -u origin --all
git push -u origin --tags
Zaletą tego podejścia jest to, że nie usuwasz gałęzi, która odpowiada twojemu staremu serwerowi.
Możesz użyć następującego polecenia:
git remote set-url --push origin new_repo_url
Przykład z http://gitref.org/remotes/
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github git@github.com:schacon/hw.git (fetch)
github git@github.com:schacon/hw.git (push)
origin git://github.com/github/git-reference.git (fetch)
origin git://github.com/pjhyett/hw.git (push)
Powinno być tak proste, jak:
git remote set-url origin git://new.url.here
W ten sposób zachowujesz nazwę originswojego nowego repozytorium - a następnie przesuwasz się do nowego repo starego, jak opisano w innych odpowiedziach. Przypuśćmy, że pracujesz sam i masz lokalne repozytorium, które chcesz wykonać w lustrze ze wszystkimi twoimi cruftami, możesz również (z wnętrza lokalnego repozytorium)
git push origin --mirror # origin points to your new repo
ale zobacz Czy „git push --mirror” wystarcza do utworzenia kopii zapasowej mojego repozytorium? (we wszystkich nie używaj, --mirrorale tylko raz).
Jeśli chcesz przenieść się z jednego miejsca na drugie, a także zachować kopię zapasową bieżącego miejsca na komputerze lokalnym, możesz wykonać następujące czynności:
Teraz w folderze wykonaj
git remote get-url origin
Powyższe polecenie podaje bieżący adres URL zdalnego źródła, przydatne do przywrócenia źródła w ostatnim kroku
git remote set-url origin git@github.newlocation:folder/newrepo.git
Powyższe polecenie ustawia zdalne źródło na nową lokalizację
git push --set-upstream origin develop
Powyższe polecenie wypycha bieżący aktywny oddział lokalny do zdalnego z rozwijaniem nazwy gałęzi. Oczywiście zachowuje całą historię, ponieważ w przypadku git cała historia jest również wypychana.
git remote set-url origin <original old origin>
Powyższe polecenie przywraca zdalne pochodzenie do bieżącego pochodzenia: chcesz tego, ponieważ znajdujesz się w istniejącym folderze i prawdopodobnie nie chcesz mieszać nazwy bieżącego folderu lokalnego z nowym folderem, który zamierzasz utworzyć w celu klonowania repozytorium właśnie naciskałeś na.
Mam nadzieję że to pomoże,
Jeśli chcesz migrować repozytorium #git z jednego serwera na nowy, możesz to zrobić w następujący sposób:
git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS NEW_REPOSITORY_PATH
#check out all remote branches
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags
Wszystkie zdalne gałęzie i tagi ze starego repozytorium zostaną skopiowane do nowego repozytorium.
Uruchamianie tego polecenia w pojedynkę:
git push NEW_REPOSITORY_ALIAS
kopiowałby tylko nową gałąź (tylko gałęzie śledzące) do nowego repozytorium.