如何将GIT存储库从一台服务器迁移到新服务器

我有一个服务器,我要取消。 我唯一要迁移的就是我的存储库。 这台服务器被列为我的一个项目的来源(主)。 移动存储库以保持历史logging的正确方法是什么?

要添加新的回购地点,

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改成原点。 如果您不删除原始(原始远程存储库),您可以简单地将更改推送到新的回购

 git push new_repo_name master 

如果你想迁移所有分支和标签,你应该使用下面的命令:

 git clone --mirror [oldUrl] 

克隆所有分支机构的旧回购

 cd the_repo git remote add remoteName newRepoUrl 

build立一个新的远程

 git push -f --tags remoteName refs/heads/*:refs/heads/* 

把所有refs /头(这可能是你想要的)

复制它。 这真的很简单。 🙂

在客户端,只需编辑客户端的本地仓库中的.git / config,根据需要将您的遥控器指向新的URL。

完美地为我工作。

 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 

我不得不提一下,这会创build一个当前回购的镜像,然后将其推到新的位置。 因此,这可能需要一些时间进行大量回购或连接速度较慢

我只是重新发布其他人所说的,在一个简单的指示列表。

  1. 移动存储库:只需login到新服务器, cd到您现在想要存放存储库的父目录,然后使用rsync从旧服务器复制:

     new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git . 
  2. 使客户端指向新的存储库:现在,在每个使用存储库的客户端上,只需删除指向旧的源的指针,并添加一个到新的。

     client> git remote rm origin client> git remote add origin user@new.server.com:path/to/repository.git 

其他一些答案中的某些部分就是这样做的。

 git clone --mirror git@oldserver:oldproject.git cd oldproject.git git remote add new git@newserver:newproject.git git push --mirror new 

在GitHub上看看这个配方: https : //help.github.com/articles/importing-an-external-git-repository

在发现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 

为我工作很好。

您可以使用以下命令:

 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远程添加新的来源
  • 混帐推 – 全新的起源
  • 混帐推 – 标签新的起源
  • git remote rm origin
  • git远程重命名新的起源

关于存储库的所有信息(orgin,trunk等)都存储在一个名为'.git'的文件夹中,在这个文件夹中初始化存储库。 所以,您需要将内容复制到新的服务器,使用这里提供的说明

按照这些说明如果你想保持所有的提交和分支从旧到新的回购

 git clone --bare <old-repo-url> cd <old-repo-directory> git push --mirror <new-repo-url> 

如果你想从一台服务器迁移#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 

只会将一个主分支(只跟踪分支)复制到新的存储库。

您可以使用git-copy来复制所有历史logging的回购。

 git copy http://a.com/old.git http://a.com/new.git