git-svn树的git clone?

gen*_*ack 17 svn git workflow git-svn

我有一个'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工作流,还是应该退出这棵树?

Chr*_*egg 9

我有一些桥接设置用于我的一些项目,但它只是从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
    
    Run Code Online (Sandbox Code Playgroud)
  • 创建一个混合的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
    
    Run Code Online (Sandbox Code Playgroud)
  • 更新镜像

    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
    
    Run Code Online (Sandbox Code Playgroud)

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


ara*_*nid 9

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


gen*_*ack 5

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