Git将现有的仓库推送到新的和不同的远程仓库服务器?


494

假设我在git.fedorahosted.org上有一个存储库,并且我想将此存储库克隆到我在github上的帐户中,以便在fedorahosted上更“正式” 的存储库之外拥有自己的游乐场。最初将其复制过来的步骤是什么?在github中有一个漂亮的“ fork”按钮,但是出于明显的原因我不能使用它。

我将如何跟踪在fedorahosted存储库中到github的更改?

Answers:


750
  1. 在github上创建一个新的仓库。
  2. 将存储库从fedorahosted克隆到本地计算机。
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

现在,您可以像其他任何github存储库一样使用它。要从上游拉补丁,只需运行git pull upstream master && git push origin master


14
没有理由重命名原始来源,只需给新的游乐场命名。
tacaswell

34
@tcaswell从技术上讲不是,但是这是一个origin规范的远程约定,它指向规范的远程位置。在这种情况下,github的位置可能是规范的。
troelskn

1
我认为“上游”是规范的位置,但是我认为这已经开始分裂。
塔卡斯韦尔2013年

3
也许我应该提出一个不同的问题,但是我认为你们正在讨论我想要的东西。我想添加一个新的远程服务器,而不是替换现有的远程服务器,因此我可以继续从旧的存储库中提取数据,但将所有更改推送到新的数据库中。
ThatAintWorking 2014年

13
@ThatAintWorking您可能应该打开一个新问题,但是简而言之,您可以使用命令添加任意数量的遥控器git remote add。然后,您可以通过在中明确指出遥控器来推送到其中之一git push。例如git push foobar master,将当前分支推送到master远程foobar
troelskn 2014年

108

有一个有用的链接,这个问题的答案已删除: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

5
裸克隆和将镜像推入简单地添加并推入另一个远程服务器的好处是什么?是否所有分支都将被推送,而不仅仅是当前分支?(如果是这样,这似乎是应该接受的答案的限制。)
yoyo

3
这正是我想要的信息,--bare / --mirror通常是人们想要执行的操作!这是一个重要的答案!谢谢
隔板

1
大!绝对是关于主题问题的最正确答案。谢谢!如果我不这样做,我总会得到error: failed to push some refs to 'https://github.com/username/testrep.git'
Denis Babarykin

45

要将现有存储库推入其他存储库,您需要:

  1. 首先克隆原始存储库。

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

    cd rhq
    git push https://github.com/user/example master:master
    

您可以更改master:mastersource: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以查看更改历史记录。


2
git push ... old_branch_name:new_branch_name让你从旧仓库推送特性分支作为新的存储库的主分支。有用的!
gorjanz '18

这是我最简单的方法。
亚当

15

您是否真的要简单地将本地存储库(及其本地分支等)推送到新的远程服务器上,还是真的要在新的远程服务器上镜像旧的远程服务器(及其所有分支,标签等)?如果是后者,这是一个有关如何正确镜像git存储库的好博客

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

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

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

我认为这是链接:blog.plataformatec.com.br/2013/05/...
大卫

11

试试这个方法如何移动完整的Git存储库

  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. 现在,使用以下命令将本地存储库链接到新创建的NEW存储库:

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

    git push origin --all
    
    
    git push --tags
    
  10. 您现在可以从ORI仓库中获得完整副本。


9

我发现了一个解决方案使用设置网址简洁,很容易理解

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


7

只需使用以下命令更改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

2

我曾经也有过一样的问题。

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

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

然后,我从本地路径创建并添加了新的存储库(在我的示例中是使用GitHub Desktop)。


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

您也可以同时使用/ 多个遥控器


我一直在寻找相同的问题,然后做了同样的事情并解决了。
Mohit Patidar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.