【问题标题】:How to mirror one one git remote to another with push如何通过推送将一个 git 远程镜像到另一个
【发布时间】:2009-09-08 09:19:29
【问题描述】:

问题很简单。我使用 git cvsimport 将 cvs 存储库导入到本地 git 存储库中的远程分支。然后,我希望将此存储库:分支、标签和所有内容同步到云中的 git 存储库(github / gitorious)。为此,我无权访问 rsync 或直接复制存储库,我必须使用 git push。

如何镜像我的本地存储库,以便其他人可以访问完整的 _cvsimport_d 历史记录?

具体来说:
我使用 cvsimport 导入和跟踪存储库:

git cvsimport -i -v -C cdt-make-core -d :pserver:anonymous@dev.eclipse.org:/cvsroot/tools -r cvs org.eclipse.cdt/all/org.eclipse.cdt。 make.core

以上将org.eclipse.cdt.make.core导入到远程cvs的git repo cdt-make-core中。

然后我可以将主 CVS 分支的 HEAD 推送到 github:

git push github cvs/master:refs/heads/cvs/HEAD

(我明确指定了遥控器上的路径,所以如果它不存在,它就会被创建。)

有没有办法同步所有分支: cvs/* => cvs/* 在远程?
有什么方法可以同步所有标签吗?

【问题讨论】:

    标签: git cvs git-cvs


    【解决方案1】:

    我认为您正在寻找 --mirror 推送选项:

    git push --mirror github
    

    这将推送所有引用(分支和标签),包括非快进更新。我用它来创建本地存储库的备份。

    man page 是这样描述的:

    不是命名每个要推送的 ref,而是指定将 $GIT_DIR/refs/ 下的所有 ref(包括但不限于 refs/heads/refs/remotes/refs/tags/)镜像到远程存储库。新创建的本地 refs 会被推送到远端,本地更新的 refs 会在远端强制更新,删除的 refs 会从远端移除。如果设置了配置选项remote.<remote>.mirror,这是默认设置。

    [OT:我在日常工作中使用 CDT,我喜欢它!]

    【讨论】:

    • 谢谢。不幸的是,这似乎并没有达到我想要的效果。看起来这使得云中的存储库看起来像我的,这意味着 github 存储库有一个“cvs”远程,但没有可见的 cvs 分支。我想要的是将 remotes/cvs/* 的全部内容复制到 github 上的 cvs/* 中。
    • 啊,我现在明白了。对不起,死路一条。
    【解决方案2】:

    我的发现是,如果您使用下面的第二个合理的解决方案,您需要先执行 --mirror,因为它会清除您尝试推送的那些 cvs/ 分支。所以完整的公式是:

    git push --mirror -v github
    git push --force github cvs/master:refs/heads/cvs/HEAD
    for x in `git branch -r | grep '^..cvs/[a-zA-Z0-9_-]*$' | sed -e 's/^..//'` ; do  
      git push -v github $x:refs/heads/$x
      git config branch.$x.remote github
      git config branch.$x.merge refs/heads/$x
    done
    

    【讨论】:

      【解决方案3】:

      经过实验,我认为没有任何内置支持可以支持我想做的事情。

      不过似乎有两种合理的解决方案:

      • 不要将 -r 指定到 cvsimport。
        然后,导入的分支将直接存在于存储库中,并且 --mirror 可以按照 Pat 的建议使用。
      • 编写一个 shell 脚本,一次推送一个 *cvs/** 遥控器(这很简单)。
        使用 --mirror 以便正确同步标签

      我最初想将 cvsimportd 分支分开以进行命名空间。然而,对于第一个选项,保持 cvsimport 存储库完全独立(并且仅从中克隆)是有意义的。然后我可以继续跟踪 CVS,而不会有弄脏跟踪 git 存储库的风险。

      【讨论】:

        猜你喜欢
        • 2020-06-09
        • 2013-04-16
        • 2015-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-17
        相关资源
        最近更新 更多