问题很简单。我已经使用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 / *? 有没有办法同步所有标签?
答案 0 :(得分:5)
我认为您正在寻找推送的--mirror
选项:
git push --mirror github
这将推送所有引用(分支和标记),包括非快进更新。我使用它来创建本地存储库的备份。
man page描述如下:
指定
$GIT_DIR/refs/
下的所有引用(包括但不限于refs/heads/
,refs/remotes/
和refs/tags/
),而不是将每个引用命名为push。到远程存储库。新创建的本地引用将被推送到远程端,本地更新的引用将在远程端强制更新,并且已删除的引用将从远程端删除。如果设置了配置选项remote.<remote>.mirror
,则这是默认值。
答案 1 :(得分:3)
我的调查结果是,如果您使用下面的第二个合理解决方案,则需要首先执行 - mirror ,因为它会清除您尝试推送的那些cv /分支。所以完整的公式是:
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
答案 2 :(得分:1)
经过实验,我不相信对我想做的事情有任何内置的支持。
然而,似乎有两个合理的解决方案:
我原本希望将 cvsimport d分支与命名空间分开。但是,对于第一个选项,保持cvsimport存储库完全独立(并且仅从中克隆)是有意义的。然后,我可以继续跟踪CVS,而不会有跟踪git repo弄脏的风险。