7

问题很简单。我使用 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导入到git repo cdt-make-core 中的远程cvs中。

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

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

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

有什么方法可以同步所有分支: cvs/* => cvs/* 在遥控器上?
有没有办法同步所有标签?

4

3 回答 3

5

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

git push --mirror github

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

手册页是这样描述的:

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

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

于 2009-09-08T15:28:49.320 回答
3

我的发现是,如果您使用下面的第二个合理的解决方案,您需要先执行--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
于 2010-01-29T17:21:16.740 回答
1

经过实验,我不相信有任何内置支持可以支持我想做的事情。

然而,似乎有两个合理的解决方案:

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

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

于 2009-09-15T09:28:09.100 回答