How to migrate GIT repository from one server to a new one
我有一台要关闭的服务器。 我剩下的唯一要迁移的是我的存储库。 该服务器被列为我的一个项目的来源(主服务器)。 移动存储库以保留历史记录的正确方法是什么?
要添加新的回购位置,
1 | git remote add new_repo_name new_repo_url |
然后将内容推送到新位置
1 | git push new_repo_name master |
最后删除旧的
1 | git remote rm origin |
之后,您可以执行bdonlan所说的操作,然后编辑.git / config文件以将new_repo_name更改为origin。如果您不删除原始资源(原始远程存储库),则只需使用以下命令将更改推送到新存储库即可
1 | git push new_repo_name master |
如果要迁移所有分支和标记,则应使用以下命令:
1 | git clone --mirror [oldUrl] |
用所有分支克隆旧仓库
1 2 | cd the_repo git remote add remoteName newRepoUrl |
设置一个新的遥控器
1 | git push -f --tags remoteName refs/heads/*:refs/heads/* |
将所有裁判推到裁判/门下(这可能是您想要的)
这对我来说是完美的。
1 2 3 4 | 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 / config即可根据需要将您的遥控器指向新的URL。
这是在其他一些答案中分部分完成的。
1 2 3 4 | git clone --mirror git@oldserver:oldproject.git cd oldproject.git git remote add new git@newserver:newproject.git git push --mirror new |
我只是按照简单的说明列表重新发布其他人说的话。
移动存储库:只需登录到新服务器,
1 | new.server> rsync -a -v -e ssh [email protected]:path/to/repository.git . |
使客户端指向新的存储库:现在,在使用该存储库的每个客户端上,只需删除指向旧源的指针,然后将指针添加到新的指针即可。
1 2 | client> git remote rm origin client> git remote add origin [email protected]:path/to/repository.git |
在GitHub上查看以下食谱:
https://help.github.com/articles/importing-an-external-git-repository
在发现
像魅力一样工作!
我按照BitBucket上的说明将存储库及其所有分支移到那里。以下是
1 2 3 4 5 | 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://[email protected]/<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 add new-origin
- git push-所有新起点
- git push-标记新来源
- git remote rm起源
- git remote重命名新起点
应该很简单:
1 | git remote set-url origin git://new.url.here |
这样,您可以为新存储库保留名称
1 | git push origin --mirror # origin points to your new repo |
但是请参阅" git push --mirror"是否足以备份我的存储库? (总计一次不使用
您可以使用以下命令:
1 | git remote set-url --push origin new_repo_url |
来自http://gitref.org/remotes/的示例
1 2 3 4 5 6 7 8 9 10 11 | $ git remote -v github [email protected]:schacon/hw.git (fetch) github [email protected]: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 [email protected]:schacon/hw.git (fetch) github [email protected]:schacon/hw.git (push) origin git://github.com/github/git-reference.git (fetch) origin git://github.com/pjhyett/hw.git (push) |
这是此答案的一种变体,目前由gitlab建议将git存储库从一台服务器"迁移"到另一台服务器。
让我们假设您的旧项目名为
在新服务器上创建一个仓库。我们将假定该新项目的URL为
打开命令行界面,然后输入以下内容:
1 2 3 4 5 | 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 |
这种方法的好处是您不会删除与旧服务器相对应的分支。
如果您想保留所有提交和分支从旧到新的仓库,请遵循以下说明
1 2 3 | git clone --bare cd git push --mirror <new-repo-url> |
您可以使用git-copy复制所有历史记录的仓库。
1 | git copy http://a.com/old.git http://a.com/new.git |
如果要将#git存储库从一台服务器迁移到新服务器,可以这样进行:
1 2 3 4 5 6 7 | 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 |
旧存储库中的所有远程分支和标签都将复制到新存储库中。
单独运行此命令:
1 | git push NEW_REPOSITORY_ALIAS |
只会将主分支(仅跟踪分支)复制到新存储库。
如果要从一个原点移动到另一个原点,并且还要在本地计算机上保留当前原点的备份,则可以使用以下步骤:
此步骤创建一个存储库,我们可以在其中将代码推送到
现在在文件夹中
1 | git remote get-url origin |
上面的命令提供了当前的远程源URL,在最后一步中将源设置回
1 | git remote set-url origin [email protected]:folder/newrepo.git |
上面的命令将远程原点设置为新位置
1 | git push --set-upstream origin develop |
上面的命令将当前活动的本地分支推送到带有branchname的远程目录。当然,它会保留所有历史记录,因为git也会推送所有历史记录。
1 | git remote set-url origin <original old origin> |
上面的命令将远程原点设置回当前原点:您需要这样做,因为您位于现有文件夹中,并且可能不希望将当前本地文件夹名称与将要创建的用于克隆存储库的新文件夹混合使用你只是推到。
希望这可以帮助,