push = : 表示"push any 'matching' branches (i.e. branches that already exist in the remote repository and have a local counterpart)",而 push = refs/tags/* 表示"push all tags" .
# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v
git clone --bare https://your-source-repo/repo.git .
git push --mirror https://your-destination-repo/repo.git
11 回答
要推送all your branches,请使用(将REMOTE替换为遥控器的名称,例如"origin"):
要推all your tags:
最后,我认为您可以在一个命令中执行以下操作:
但是,除了--mirror之外,还会推送你的遥控器,所以这可能不是你想要的 .
在像我这样的情况下,你获得了一个回购,现在正在将远程原点切换到另一个回购,一个新的空回购......
所以你有你的repo和里面的所有分支,但是你仍然需要检查那些分支以获得
git push --all
命令以实际推送它们 .你应该在推动之前执行此操作:
其次是
这是对我所处的情况更好的另一种看法 . 它解决了你有多个遥控器的问题,想要将远程
source
中的所有分支克隆到远程destination
但不必全部检查它们预先 .(我在Daniel的解决方案中遇到的问题是,如果我之前已经检查过它,它将拒绝从
source
远程检出跟踪分支,即它在推送之前不会更新我的本地分支)这会将远程
source
中的所有分支推送到destination
中的头部分支,可能会执行非快进推送 . 您仍然需要单独推送标签 .git-push
的联机帮助页值得一读 . 结合this website我在_1437385中写了以下内容:push = :
表示"push any 'matching' branches (i.e. branches that already exist in the remote repository and have a local counterpart)",而push = refs/tags/*
表示"push all tags" .所以现在我只需要运行
git push
来推送所有匹配的分支和所有标签 .是的,这不是OP想要的(所有分支都必须已经存在于远程端),但是对于那些在搜索“我如何在同一时间推送分支和标签”时发现这个问题的人可能会有所帮助时间” .
如果目的地为空,这是我找到的最简洁的方法 . 切换到空文件夹,然后:
适当地用
https://...
代替file:///your/repo
等 .在我的情况下,有用的是什么 .
我发现上面的答案仍然有一些不清楚的东西,这会误导用户 . 首先,确定
git push new_origin --all
和git push new_origin --mirror
不能复制所有原始分支,它只是将您当地存在的分支复制到您的new_origin .以下是我测试的两种有用的方法:
1,复制克隆裸仓库 .
git clone --bare origin_url
,然后输入文件夹,和git push new_origin_url --mirror
. 通过这种方式,你也可以使用git clone --mirror origin_url
,--bare
和--mirror
将下载一个裸仓库,不包括工作空间 . 请参考this2,如果你有一个使用
git clone
的git仓库,这意味着你有裸仓库和git工作区,你可以使用git remote add new_origin new_origin_url
,然后git push new_origin +refs/remotes/origin/\*:refs/heads/\*
,然后git push new_origin --tags
通过这种方式,你将得到一个额外的头部分支,这是没有意义的 .
推送分支和标签(但不是遥控器):
这相当于为
git push
组合--tags
和--all
选项,git似乎不允许这样做 .基于@Daniel回答我做了:
我发现这些似乎都不适合我 . 随意将其烧死,但由于某种原因无法让其他选项正常工作 .
预期的结果是一个“克隆”到另一个远程(即从Github到另一个提供者)的repo:
所有分支都在新远程上创建
所有分支历史记录都在新远程上创建
(我试过的每个解决方案都错过了这个)
所有标签都是在新遥控器上创建的
来源移动(给定)
非破坏性(暂停--mirror选项)
我看到的主要问题是所有远程分支都没有在新的远程中重新创建 . 如果一个命令,新遥控器没有分支历史记录(即执行
git checkout branch; git log
不会显示预期的分支提交) .我注意到
git checkout -b branchname
与git checkout branchname
不同(后者是我需要的) . 我注意到git checkout --track branchname
似乎没有拉动分支历史记录 .My Solution (基于powershell):
Mirroring a repository
创建存储库的裸克隆 .
镜像推送到新存储库 .
删除您在步骤1中创建的临时本地存储库 .
Mirroring a repository that contains Git Large File Storage objects
创建存储库的裸克隆 . 将示例用户名替换为拥有存储库的个人或组织的名称,并将示例存储库名称替换为您要复制的存储库的名称 .
导航到刚刚克隆的存储库 .
拉入存储库的Git Large File Storage对象 .
镜像推送到新存储库 .
将存储库的Git Large File Storage对象推送到镜像 .
删除您在步骤1中创建的临时本地存储库 .
以上说明来自Github帮助:https://help.github.com/articles/duplicating-a-repository/