【问题标题】:Mirror git repo into new branch将 git repo 镜像到新分支
【发布时间】:2021-03-21 13:38:02
【问题描述】:

我想将我的一个存储库镜像到一个私有存储库中,以进行一些非公开更改,但仍从公开存储库获取更新。 普通镜像的问题在于,我每次更新 privat 存储库时,我的更改都会被删除。 有没有办法解决这个问题?

我的想法是这样:

回购 A 是公开的,回购 B 是私人的。 我的 privat repo 有分支 main、repoA、我的修复。 现在我想将 repo A 镜像到 repo B 分支 repoA。

但这也破坏了我一直尝试更新的修复分支。

【问题讨论】:

  • “镜像”是什么意思?你的意思是“git克隆”吗?如果你“git clone”一个 repo,你可以对任何分支进行更改,并且当你执行“git pull”从原始 repo 中提取新更改时,你的更改不会丢失。您的更改将与原始存储库中的任何更改合并。
  • 好吧,我目前只尝试过这种方式:docs.github.com/en/github/… 但每次获取时都会覆盖所有本地引用,
  • 不要使用--mirror。使用该选项是您遇到麻烦的原因。阅读您在上面引用的那个页面。它解释了--mirror 标志的作用。它正是这样做的……当您从原始存储库更新时,它会导致您的更改被炸毁。你只使用--mirror。当您希望副本与原件完全不同时。但是您希望副本有所不同,包含您的额外更改,但能够从原始版本更新。这是一个普通的clone,没有--mirror。您可能想改用--bare。这只是避免了本地工作目录。
  • 好的,所以我只需要 git clone --bare github.com/exampleuser/repoA.git 克隆第一个 repo 并将推送位置设置为新 repoB? git remote set-url --push origin github.com/exampleuser/repoB 然后我可以从 repo a 获取并将新的更改推送到 repo b?
  • 是的,完全正确。

标签: git mirror repo


【解决方案1】:

您不想使用--mirror。使用该选项是您遇到麻烦的原因。 --mirror 选项会强制执行您所看到和不想要的行为。当您从原始存储库更新时,它会导致您的更改被破坏。仅当您希望副本与原始副本完全不同(一旦更新)时,您才使用 --mirror

在您的情况下,您想改用--bare,因为它将提供您想要的--mirror 行为的一部分,即仅创建底层存储库的副本而没有工作目录。但与--mirror 不同,--bare 不会导致在从原始副本更新副本时丢失对副本的未来更改。如果您了解直接“克隆”在没有行为更改标志的情况下的作用,那么您就会知道 --bare 的作用。 --bare 标志只影响 repo 在磁盘上的形式。它不会改变关于如何在 repos 之间应用更新的任何内容。

【讨论】:

    【解决方案2】:

    我知道这个问题有点老了,但我遇到了类似的问题,我认为这就是解决方法:https://github.com/marketplace/actions/github-repo-sync

    这可以添加到 github 操作中,或者您可以浏览源代码并查看它们是如何执行的,然后自己手动执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-03
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 2020-09-19
      • 1970-01-01
      • 2015-04-15
      相关资源
      最近更新 更多