【问题标题】:How to migrate GIT repository from one server to a new one如何将 GIT 存储库从一台服务器迁移到新服务器
【发布时间】:2010-12-01 20:41:53
【问题描述】:

我有一台服务器要关闭。我唯一要迁移的是我的存储库。该服务器被列为我的一个项目的源(主)。移动存储库以保留历史记录的正确方法是什么。

【问题讨论】:

  • 关于存储库的所有信息(orgin、trunk 等)都存储在一个名为“.git”的文件夹中,您将在其中初始化存储库。因此,您需要使用提供的说明将内容复制到新服务器 Here
  • 只需 git config remote.origin.url newurl 见stackoverflow.com/questions/3011402/…
  • 如果您希望迁移您的存储库并且所有分支都使用 jzwiener 或 Roberto 的答案,而不是接受的答案。

标签: git


【解决方案1】:

要添加新的 repo 位置,

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一次推送所有分支。
  • 所有分支的迁移可以在stackoverflow.com/a/18336145/923599找到
  • 这个命令对我有用,而不是编辑 git-config 文件:git remote rename new_repo_name origin
【解决方案2】:

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

git clone --mirror [oldUrl]

用所有分支克隆旧仓库

cd the_repo
git remote add remoteName newRepoUrl

设置新的遥控器

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

将所有 refs 推送到 refs/heads 下(这可能是您想要的)

【讨论】:

  • Git 抱怨 --tagsrefs/heads/*:refs/heads/*--mirror 不兼容。 stackoverflow.com/a/26552740/1484831 运作良好。
  • 我用过这个,它对我有用。 Probably should be the elected answer.请注意,您在本地获得的“代码”似乎对元数据很重,如果出现问题,新手就不清楚。
  • 这应该是认可的答案。比其他解决方案好得多
  • 我的新远程存储库上的所有分支都使用refs/heads/refs/heads 前缀为git push -f --tags remoteName refs/heads/*:refs/heads/*,因此我已切换到git push remoteName --mirror
  • push 也支持--mirrorgit clone --mirror; cd repo; git push --mirror new_remote 应该可以解决问题
【解决方案3】:

更新为使用 git push --mirror origin 而不是 cmets 中建议的 git push -f origin


这对我有用完美无缺

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 --mirror origin

我不得不提一下,这会创建您当前存储库的镜像,然后将其推送到新位置。 因此,对于大型存储库或慢速连接,这可能需要一些时间

【讨论】:

  • *** 这个 ***
  • 这是一个很好的解决方案 git remote set-url origin (在将旧源同步到新服务器/位置之后)
  • 这个炒菜很棒。不会混淆多个遥控器
  • 首选git push --mirror origin 而不是-f
  • Git 版本 2.17.1 使用 git push -f origin 仅推送工作目录的当前分支。 @Aidiakapi 对git push --mirror origin 的推荐对我有用,推送了所有分支、标签、历史记录等。
【解决方案4】:

复制过来。真的就是这么简单。 :)

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

【讨论】:

  • 您也可以简单地克隆它。此外,您可以使用 git remote rm origin 代替直接编辑 .git/config 文件; git remote add origin .
  • rming 遥控器将丢失该配置部分下的任何配置 - 克隆它而不采取任何额外步骤将丢失除主干以外的分支。可以处理这些问题,但是,真的 - 只需 rsync 即可。
  • 仅使用 git 来完成工作的解决方案是什么? rsync 需要额外的难以跨越的管理圈
  • 这也保留了例如钩子和其他配置,所以我更喜欢它而不是纯 git 解决方案
【解决方案5】:

这在其他一些答案中是部分完成的。

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

【讨论】:

  • 事实上,这是最完整、最直接的答案。
  • --mirror 在推送中很重要:这应该是正确的答案
  • 当你在新服务器上初始化新仓库的时候记得做一个bare init,否则推送不会成功:git init --bare
  • 这是正确的方法,裸存储库会跨分支拉下文件和所有历史记录。这会迁移整个工作历史:实际上是同类副本。
【解决方案6】:

我只是在一个简单的说明列表中重新发布其他人所说的话。

  1. 移动存储库: 只需登录到新服务器,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
    

【讨论】:

  • 简单有效。如果要限制服务器之间的流量,可以添加标志 --bwlimit=XXX,其中 XXX 等于每秒千字节的带宽。
  • 比删除和添加更好:git remote set-url origin user@new.server.com:path/to/repository.git
  • 对于那些使用 git+capistrano 部署到服务器的用户,请注意我必须在 2 个地方使用 set-url origin:在 localhost 和服务器上的缓存副本上。
【解决方案7】:

看看 GitHub 上的这个食谱: https://help.github.com/articles/importing-an-external-git-repository

在发现git push --mirror之前尝试了很多方法。

工作就像一个魅力!

【讨论】:

  • 所以基本上git clone --mirror ...git remote add ...git push --mirror ...
【解决方案8】:

我按照 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

对我来说效果很好。

【讨论】:

    【解决方案9】:

    请按以下步骤操作:

    • git remote add new-origin
    • git push --all new-origin
    • git push --tags new-origin
    • git 远程 rm 来源
    • git remote rename new-origin origin

    【讨论】:

      【解决方案10】:

      这是 this answer 的一个变体,目前由 gitlab 建议将 git 存储库从一台服务器“迁移”到另一台服务器。

      1. 假设您的旧项目名为existing_repo,存储在existing_repo 文件夹中。

      2. 在您的新服务器上创建一个存储库。我们假设那个新项目的 url 是git@newserver:newproject.git

      3. 打开命令行界面,输入以下内容:

        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
        

      这种方法的好处是不会删除旧服务器对应的分支。

      【讨论】:

        【解决方案11】:

        应该很简单:

        git remote set-url origin git://new.url.here
        

        这样你就可以为你的新仓库保留名称origin - 然后将旧仓库推送到新仓库,如其他答案中详述的那样。假设你一个人工作,并且你有一个本地 repo,你想在其中镜像你所有的杂物,你也可以(从你的本地 repo 内部)

        git push origin --mirror # origin points to your new repo
        

        但请参阅Is "git push --mirror" sufficient for backing up my repository?(总之不要使用--mirror,而是一次)。

        【讨论】:

          【解决方案12】:

          您可以使用以下命令:

          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)
          

          【讨论】:

            【解决方案13】:

            如果您想将所有提交和分支从旧仓库保留到新仓库,请遵循这些说明

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

            【讨论】:

              【解决方案14】:

              您可以使用git-copy 复制包含所有历史记录的存储库。

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

              【讨论】:

                【解决方案15】:

                如果您想从一个来源移动到另一个来源,并在本地计算机上保留当前来源的备份,您可以使用以下步骤:

                1. 首先在本地转到要移动的 (git) 文件夹
                2. 在线创建新的存储库 此步骤创建一个存储库,我们可以将代码推送到该存储库

                现在在文件夹里做

                git remote get-url origin
                

                上面的命令给出了当前的远程原点 url,对于在最后一步设置原点很有用

                git remote set-url origin git@github.newlocation:folder/newrepo.git
                

                上述命令将远程原点设置为新位置

                git push --set-upstream origin develop
                

                上述命令将当前活动的本地分支推送到远程分支名称为develop。当然,它会保留所有历史记录,就像 git 一样,所有历史记录也会被推送。

                git remote set-url origin <original old origin>
                

                上述命令将远程原点设置为您当前的原点:您想要这样做是因为您在现有文件夹中,并且您可能不想将当前本地文件夹名称与您要为其创建的新文件夹混淆克隆你刚刚推送到的仓库。

                希望这会有所帮助,

                【讨论】:

                  【解决方案16】:

                  如果您想将#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
                  

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2021-11-04
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-10-04
                    • 1970-01-01
                    相关资源
                    最近更新 更多