У меня есть сервер, который я отключаю. Единственное, что мне осталось перенести, это мой репозиторий. Этот сервер указан как источник (мастер) для одного из моих проектов. Как правильно перемещать хранилище, чтобы сохранить историю.
У меня есть сервер, который я отключаю. Единственное, что мне осталось перенести, это мой репозиторий. Этот сервер указан как источник (мастер) для одного из моих проектов. Как правильно перемещать хранилище, чтобы сохранить историю.
Ответы:
Чтобы добавить новое местоположение репо,
git remote add new_repo_name new_repo_url
Затем перенесите содержимое на новое место
git push new_repo_name master
Наконец удалите старую
git remote rm origin
После этого вы можете сделать то, что сказал bdonlan, и отредактировать файл .git / config, чтобы изменить new_repo_name на origin. Если вы не удалите источник (исходный удаленный репозиторий), вы можете просто отправить изменения в новый репозиторий с помощью
git push new_repo_name master
git push -u new_repo_name --all.
git remote rename new_repo_name origin
Если вы хотите перенести все ветви и теги, вы должны использовать следующие команды:
git clone --mirror [oldUrl]
клонировать старый репо со всеми ветками
cd the_repo
git remote add remoteName newRepoUrl
настроить новый пульт
git push -f --tags remoteName refs/heads/*:refs/heads/*
подтолкнуть все ссылки под refs / Heads (что, вероятно, то, что вы хотите)
--tagsи refs/heads/*:refs/heads/*не совместимы с --mirror. stackoverflow.com/a/26552740/1484831 работал хорошо.
refs/heads/refs/headsпомощью , git push -f --tags remoteName refs/heads/*:refs/heads/*так что я Сменнаяgit push remoteName --mirror
pushтакже поддерживает --mirror. git clone --mirror; cd repo; git push --mirror new_remoteдолжен сделать трюк
Это сработало для меня без нареканий .
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
Я должен упомянуть, что это создает зеркало вашего текущего репо, а затем подталкивает его на новое место. Следовательно, это может занять некоторое время для больших репозиториев или медленных соединений .
git push --mirror originболее -f.
Скопируйте это. Это действительно так просто. :)
На стороне клиента, просто отредактируйте .git / config в локальном репозитории клиента, чтобы указать удаленным пользователям новый URL при необходимости.
Это как бы сделано по частям в некоторых других ответах.
git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new
--mirrorв толчке очень важно: это должен быть правильный ответ
git init --bare
Я просто публикую то, что сказали другие, в простом для следования списке инструкций.
Переместите репозиторий: просто войдите на новый сервер, cdв родительский каталог, где вы сейчас хотите хранить репозиторий, и используйте rsyncдля копирования со старого сервера:
new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
Сделайте так, чтобы клиенты указывали на новый репозиторий: теперь на каждом клиенте, использующем репозиторий, просто удалите указатель на старый источник и добавьте один к новому.
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
Посмотрите на этот рецепт на GitHub: https://help.github.com/articles/importing-an-external-git-repository
Я попробовал несколько методов, прежде чем обнаружить git push --mirror.
Работал как шарм!
git clone --mirror ..., git remote add ...,git push --mirror ...
Я следовал инструкциям на BitBucket, чтобы перенести репо со всеми его ветками туда. Здесь идут шаги с объяснениями, следующими за #символом:
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
Работал хорошо для меня.
Это вариант этого ответа , который в настоящее время предлагает gitlab «перенести» репозиторий git с одного сервера на другой.
Давайте предположим, что ваш старый проект называется existing_repo, хранится в existing_repoпапке.
Создайте репо на вашем новом сервере. Предположим, что URL этого нового проектаgit@newserver:newproject.git
Откройте интерфейс командной строки и введите следующее:
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
Преимущества этого подхода в том, что вы не удаляете ветку, которая соответствует вашему старому серверу.
Вы можете использовать следующую команду:
git remote set-url --push origin new_repo_url
Пример с 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)
Должно быть так просто, как:
git remote set-url origin git://new.url.here
Таким образом, вы сохраняете имя originдля своего нового репо, а затем подталкиваете к новому репо старое, как подробно описано в других ответах. Предположим, что вы работаете в одиночку, и у вас есть локальное репо, которое вы хотите отразить со всеми вашими затратами, вы также можете (из своего локального репо)
git push origin --mirror # origin points to your new repo
но посмотрите, достаточно ли "git push --mirror" для резервного копирования моего хранилища? (во всех не использовать, --mirrorно один раз).
Если вы хотите перейти от одного источника к другому, а также сохранить резервную копию вашего текущего источника на локальном компьютере, вы можете использовать эти шаги:
Сейчас в папке делаю
git remote get-url origin
Приведенная выше команда дает текущий URL удаленного источника, что полезно для возврата источника на последнем шаге
git remote set-url origin git@github.newlocation:folder/newrepo.git
Приведенная выше команда устанавливает удаленное начало в новое местоположение
git push --set-upstream origin develop
Приведенная выше команда переводит текущую активную локальную ветвь в удаленную с разработкой branchname. Конечно, это сохраняет всю историю, так как с git вся история также выдвигается.
git remote set-url origin <original old origin>
Приведенная выше команда устанавливает удаленный источник на ваш текущий источник: вам это нужно, потому что вы находитесь в существующей папке и, возможно, не хотите смешивать имя текущей локальной папки с новой папкой, которую вы собираетесь создать для клонирования репозитория. Вы только что подтолкнули к.
Надеюсь это поможет,
Если вы хотите перенести репозиторий #git с одного сервера на новый, вы можете сделать это следующим образом:
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
Все удаленные ветви и теги из старого репозитория будут скопированы в новый репозиторий.
Запуск этой команды в одиночку:
git push NEW_REPOSITORY_ALIAS
будет только копировать основную ветку (только отслеживание ветвей) в новый репозиторий.