如何使用push将一个git远程镜像到另一个远程镜像

Jam*_*urn 7 git cvs git-cvs

问题很简单.我已经使用git cvsimport将cvs repo导入到本地git存储库中的远程分支中.然后,我希望将此存储库:branches,tags和all同步到云中的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/*?
有没有办法同步所有标签?

Pat*_*otz 5

我想你正在寻找--mirror推动的选择:

git push --mirror github
Run Code Online (Sandbox Code Playgroud)

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

手册页描述它是这样的:

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

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


Dav*_*ams 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
Run Code Online (Sandbox Code Playgroud)