Git将现有的repo推送到一个新的不同的远程repo服务器?

时间:2011-03-03 14:13:07

标签: git github

假设我在git.fedorahosted.org上有一个存储库,我想将它克隆到我在github的帐户中,除了fedorahosted上更“官方”的回购之外,还有我自己的游乐场。 最初复制它的步骤是什么? 在github中有一个很好的“fork”按钮,但由于显而易见的原因我无法使用它。

我如何跟踪fedorahosted repo中的变化进入github?

10 个答案:

答案 0 :(得分:640)

  1. 在github上创建一个新的仓库。
  2. 将reporahosted的repo克隆到本地计算机。
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master
  6. 现在你可以像任何其他github回购一样使用它。要从上游提取补丁,只需运行git pull upstream master && git push origin master

答案 1 :(得分:88)

这个问题的删除答案有一个有用的链接:https://help.github.com/articles/duplicating-a-repository

要点是

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location

OP的例子:

在您的本地计算机上

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git

答案 2 :(得分:36)

要将现有的仓库推送到不同的仓库,您需要:

  1. 首先克隆原始仓库。

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. 将克隆的源推送到新的存储库:

    cd rhq
    git push https://github.com/user/example master:master
    
  3. 您可以将master:master更改为source:destination分支。


    如果要推送特定的提交(分支),请执行:

    1. 在原始仓库中,创建并签出新分支:

      git checkout -b new_branch
      
    2. 选择并重置为您要开始的位置:

      git log # Find the interesting hash
      git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
      

      或者选择git cherry-pick提交以附加到现有HEAD。

    3. 然后推送到您的新仓库:

      git push https://github.com/user/example new_branch:master
      

      如果您正在变基础,请使用-f进行强制推送(不推荐)。运行git reflog以查看更改历史记录。

答案 3 :(得分:12)

您真的想简单地将本地存储库(带有本地分支机构等)推送到新的远程控制台,还是真的想要在新的远程控制器上镜像旧的远程(包括所有分支,标签等) ?如果后者在How to properly mirror a git repository上是一个很棒的博客。

我强烈建议您阅读博客中的一些非常重要的细节,但简短的版本是:

在新目录中运行以下命令:

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git

答案 4 :(得分:8)

试试这个How to move a full Git repository

  1. 使用以下命令在temp-dir目录中创建本地存储库:

    git clone temp-dir

  2. 进入temp-dir目录。

  3. 要查看ORI中不同分支的列表,请执行以下操作:

    git branch -a
    
  4. 使用以下方法检出要从ORI复制到NEW的所有分支:

    git checkout branch-name
    
  5. 现在使用以下方法从ORI获取所有标签:

    git fetch --tags
    
  6. 在执行下一步之前,请确保使用以下命令检查本地标记和分支:

    git tag
    
    
    git branch -a
    
  7. 现在使用以下命令清除ORI存储库的链接:

    git remote rm origin
    
  8. 现在使用以下命令将本地存储库链接到新创建的新存储库:

    git remote add origin <url to NEW repo>
    
  9. 现在使用以下命令推送所有分支和标记:

    git push origin --all
    
    
    git push --tags
    
  10. 您现在拥有ORI回购的完整副本。

答案 5 :(得分:7)

我找到了一个使用 set-url 的解决方案,简洁且相当容易理解

  1. 在Github
  2. 创建一个新的回购
  3. cd进入本地计算机上的现有存储库(如果尚未克隆它,请先执行此操作)
  4. git remote set-url origin https://github.com/user/example.git
  5. git push -u origin master

答案 6 :(得分:3)

如果您有现有的Git存储库:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags

答案 7 :(得分:2)

我遇到了同样的问题。

就我而言,由于我的本地机器中有原始存储库,因此我在一个没有任何隐藏文件(.git,.gitignore)的新文件夹中制作了副本。

最后,我将.gitignore文件添加到新创建的文件夹中。

然后我从本地路径创建并添加了新的存储库(在我的情况下使用GitHub Desktop)。

答案 8 :(得分:1)

这是手动进行git remote set-url origin [new repo URL]的方式:

  1. 克隆存储库:git clone <old remote>
  2. 创建GitHub存储库
  3. 打开<repository>/.git/config

    $ git config -e
    
    [core]
        repositoryformatversion = 0
        filemode = false
        bare = false
        logallrefupdates = true
        symlinks = false
        ignorecase = true
    [remote "origin"]
        url = <old remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    并更改遥控器(使用url选项)

    [remote "origin"]
        url = <new remote>
        fetch = +refs/heads/*:refs/remotes/origin/*
    
  4. 将存储库推送到GitHub:git push

您也可以同时使用// multiple remotes

答案 9 :(得分:0)

通过使用以下命令更改GIT存储库URL,只需指向新存储库:

git remote set-url origin [new repo URL]

示例:git remote set-url origin git@bitbucket.org:Batman/batmanRepoName.git

现在,推和拉已链接到新的REPO。

然后通常像这样推送:

git push -u origin master