【问题标题】:git push all branches from repo1 to repo2git将所有分支从repo1推送到repo2
【发布时间】:2020-12-06 13:43:48
【问题描述】:

我已将 Repo1 从 github 克隆到我的本地。 然后使用 git remote add new-origin 命令添加 Repo2 的 url。

Repo1 包含 100 个分支,所以我无法为每个分支结帐

我正在尝试使用 git push new-origin --all

将所有分支推送到 Repo2

但只有 Repo1 的 master 分支被推送到 Repo2。

如何将 Repo1 的所有 100 个分支推送到 Repo2,而不检查到 Repo1 的所有分支

注意:我不想使用裸存储库或镜像存储库

【问题讨论】:

  • 嗨,Romain,Repo1 是一个开源项目,我正在尝试使用这些源代码。我想将完整的 Repo1 源复制到我的 Repo2。并且经常,我想将 Repo1 的最新更改更新到我的 Repo2
  • 为什么不想使用裸存储库来实现这一点?如果您使用“--bare”克隆原始存储库,则使用“--all”的推送将正常工作。
  • 嗨,Marcelo,实际上我正在试验开源。所以每次我需要用开源更改更新我的回购。所以我不使用裸露的

标签: git github svn gitlab gerrit


【解决方案1】:

我认为它只会推送所有本地分支,所以我想你首先必须检查 origin 的所有分支然后推送它们。

这行得通吗?

git branch # should only show master
# check-out every single branch
git branch -a | grep origin | sed 's|remotes/origin/||' | xargs -I {} git checkout {}
git branch # should now show all branches
git push new-origin --all

(当心 - 这也是推送不在 origin 中的本地内容)

------评论后-试试这个也许-----

git branch -a | grep origin \
  | sed 's|remotes/origin/||' \
  | xargs -I {} git push new-origin origin/{}:refs/heads/{}

应该只列出 origin 上的所有分支,然后将它们全部推送到 new-origin 上具有相同名称的新分支

如果任何分支名称中有空格(如果可能的话)它可能不起作用。

要在尝试之前查看它会做什么,请将最后一行更改为:

  | xargs -I {} echo git push new-origin origin/{}:refs/heads/{}

如果你满意,请删除echo,然后查看

【讨论】:

  • 亚历克斯,感谢您的回复。在不检查所有分支并且不使用镜像或裸机的情况下,我可以做到这一点吗?
  • Alex,它解决了我的问题。感谢您的支持。我对这个解决方案很满意。
猜你喜欢
  • 2018-08-19
  • 2023-03-09
  • 2019-02-26
  • 2010-11-07
  • 2022-01-23
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多