2009-09-08 67 views
7

问题很简单。我已经使用git cvsimport将cvs repo导入到本地git存储库的远程分支中。然后,我希望将这个存储库:分支,标记和全部同步到云中的git存储库(github/gitorious)。要做到这一点,我没有访问rsync或直接复制存储库,我必须使用git push。如何通过按一个镜像将一个git远程镜像到另一个

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

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

git cvsimport -i -v -C cdt-make-core -d :pserver:[email protected]:/cvsroot/tools -r cvs org.eclipse.cdt/all/org.eclipse.cdt.make.core

上述进口org.eclipse.cdt.make.core成在GIT回购cdt-远程CVS使核心。

然后我可以主推CVS分支的头github上:

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

(我指定的远程明确,所以如果它不存在,它创建的路径。)

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

回答

3

我的发现是,如果您使用下面的第二个合理的解决方案,您首先需要执行- 镜像,因为它会清除您尝试推送的那些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 
5

我认为你正在寻找的--mirror选项推:

git push --mirror github 

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

man page描述这样的:

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

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

+0

谢谢。不幸的是,这似乎并没有做到我想要的。它看起来像这样使云中的存储库看起来像我的,这意味着github回购有一个'CVS'远程,但没有可见的CVS分支。 我想要的是在github上将remotes/cvs/*的全部内容复制到cvs/*。 – 2009-09-14 16:31:49

+0

啊,我现在明白了。对不起,我死了。 – 2009-09-14 17:57:55

1

已经尝试,我不相信有任何内置的是我希望做支撑。

但是似乎有有两种合理的解决办法:

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

我本来想保持cvsimport d分支分离的命名空间。然而,第一个选项是保持cvsimport存储库完全分离(并且只能从中克隆)。然后,我可以继续跟踪CVS,而不会污染跟踪git回购。

相关问题