如何将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一个当前回购的镜像,然后将其推到新的位置。 因此,这可能需要一些时间进行大量回购或连接速度较慢 。
我只是重新发布其他人所说的,在一个简单的指示列表。
-
移动存储库:只需login到新服务器,
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 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