当前位置:  开发笔记 > 编程语言 > 正文

git-svn树的git clone?

如何解决《git-svn树的gitclone?》经验,为你挑选了3个好方法。

我有一个'git-svn'工作树.我想克隆一个"纯"的git repo,然后使用git push/pull在git-svn树和git树之间移动更改,同时还使用'git svn dcommit/rebase'来移动git-svn树和基于它的SVN repo.

这似乎可以正常使用git方法在git树之间来回移动,但是当我在git-svn树中与SVN repo交互时,事情就变得很糟糕 - 要么我在推送时遇到错误,要么在git树之间拉扯,或者我在git-svn树中丢失了提交,或者其他奇怪的东西.

是否支持这种类型的SVN < - > git-svn < - > git工作流,还是应该退出这棵树?



1> Christoph Rü..:

我有一些桥接设置用于我的一些项目,但它只是从git到svn的单向(提供我们的git master分支的公共只读SVN镜像).但是,因为它可以正常工作,所以无论如何它可以帮助你或指向正确的双向方案,因为我认为它是git-> svn会产生问题,而不是svn-> git:

我的单向场景:github上的现有git存储库,需要一个git master分支的只读svn镜像

在服务器上创建并初始化目标subversion存储库:

svnadmin create svnrepo
mkdir trunk
svn import trunk svn://yoursvnserver/svnrepo
rmdir -rf trunk

创建一个混合的Git-Svn签出并初始化subversion存储库

git svn clone svn://yoursvnserver/svnrepo/trunk
cd trunk
git remote add github git://github.com/yourname/repo.git
git fetch github
git branch tmp $(cat .git/refs/remotes/github/master)
git tag -a -m "Last fetch" last tmp
INIT_COMMIT=$(git log tmp --pretty=format:%H | tail -1)
git checkout $INIT_COMMIT .
git commit -C $INIT_COMMIT
git rebase master tmp
git branch -M tmp master
git svn dcommit --rmdir --find-copies-harder

更新镜像

git fetch github
git branch tmp $(cat .git/refs/remotes/github/master)
git tag -a -m "Last fetch" newlast tmp
git rebase --onto master last tmp
git branch -M tmp master
git svn dcommit --rmdir --find-copies-harder
mv .git/refs/tags/newlast .git/refs/tags/last

来自googlecode的这两篇文章也可能有所帮助:

从Git导入

导出到Git

将Git与Google Code Hosting一起使用

使用Git开发Google代码项目



2> araqnid..:

可能导致您麻烦的一件事是git svn dcommit将重写它发送给SVN的所有提交 - 至少如果它被配置为将SVN元数据注释添加到提交消息的底部.因此,您必须采用一个流程,其中任何存储库从您的git-svn工作空间提交对其进行重新设置,丢失所有无法存储在SVN中的合并历史记录.



3> genehack..:

基于我所看到的,git-svn不支持此工作流,并且由于SVN表示合并的方式,因此不会支持此工作流.

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有