git将所有分支从一个远程推送到另一个远程

Tao*_*ang 18 git github

我有两个遥控器:上游和原点.上游是我无法推动的.起源是我自己的回购.如何从上游获取所有分支然后将它们推送到原点?我试过了:

git fetch upstream
git push --all origin
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

jos*_*ias 37

我只需要将一个存储库从 Bitbucket 复制到 GitHub,这些步骤假设您的远程名为 origin,所有分支和标签都将被复制:

git remote add neworigin url-to-new-remote
git push neworigin --tags refs/remotes/origin/*:refs/heads/*
Run Code Online (Sandbox Code Playgroud)

这样做的好处是您的工作副本中的文件不会被修改。

  • 我喜欢这个针对已经签出的存储库的答案。我看到的唯一缺点是,除了本地分支和远程分支之外,它还将“HEAD”作为分支推送到远程。 (9认同)
  • 收到错误 `zsh: no matches found: refs/remotes/origin/*:refs/heads/*` 直到我将 refspec 用引号括起来,例如 `""refs/remotes/origin/*:refs/heads/*"` (5认同)
  • 需要“--force”吗?也许添加“--tags”来包含这些? (2认同)
  • 最后,一个有效的答案,不需要在本地创建所有远程分支,也不需要特殊的“裸”克隆,也不需要“镜像”克隆 (2认同)

Nic*_*yre 30

您可能想尝试使用--mirror选项克隆上游仓库,然后使用选项推送到新的远程--mirror仓库

您将拥有以下流程:

git clone <upstream-repo-url/repo.git> --mirror
git remote add <your-remote-name> <your-remote-url/repo.git>
git push <your-remote-name> --mirror
Run Code Online (Sandbox Code Playgroud)

  • 使用push --mirror时要格外小心,因为它将删除&lt;your-remote-name&gt;上的分支 (3认同)

Ben*_*ari 9

当您git push <REMOTE> --allgit push <REMOTE> --tags所有分支和标签将从您的本地历史记录推送到远程时。通过这种方式,如果您希望将push所有分支和标签从远程(即origin)(不仅仅是您的本地历史记录)转移到另一个远程(即上游),请执行以下过程:

  1. 从源接收所有分支和标签,并使用源远程删除本地历史记录中不匹配的分支:
  2. 添加新的远程 URL:
  3. 现在,您的本地已同步。接下来,您可以将push所有分支和标签添加到新的远程:

长话短说

git fetch --prune
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#origin/}" "$remote"; done
git fetch --all
git remote add upstream <the-url-path-of-a-remote.git>
git push --all upstream
git push --tags upstream
Run Code Online (Sandbox Code Playgroud)


Rob*_*obG 8

从一个(裸)存储库克隆到另一个(裸)存储库并采用所有分支(而不仅仅是签出的分支)的一个完整答案是克隆本地裸存储库作为中介。然后将所有分支作为克隆的一部分拉出,并且 git push --all 将全部推送它们。在 Windows 上从 github 到 gitlab 执行的示例:

  1. git clone --bare git@github.com:robe070/cookbooks.git
  2. cd 食谱.git
  3. git 远程添加 gitlab git@gitlab.com:robe071/cookbookstest2.git
  4. git push --force --all gitlab
  5. git push --force --tags gitlab

结果:25 个分支推送到 gitlab

请注意,所有分支都不需要 git checkout 并且对裸仓库毫无意义。


akh*_*air -5

希望这可以帮助:

git remote add your-new-origin url-to-repo/repo.git
git push --all your-new-origin //pushes all branches
git push --tags your-new-origin //pushes all tags
Run Code Online (Sandbox Code Playgroud)

  • 这只会推送已在本地签出的分支。无论如何它不会拉动任何分支 (7认同)