git clone of git-svn tree?

前端 未结 6 1338
一生所求
一生所求 2020-12-13 03:05

I\'ve got a \'git-svn\' working tree. I\'d like to clone a \"pure\" git repo off this, and then use git push/pull to move changes between the git-svn tree and the git tree,

相关标签:
6条回答
  • 2020-12-13 03:18

    Based on what I've seen, this workflow isn't supported with git-svn, and won't be, due to the way SVN represents merges.

    0 讨论(0)
  • 2020-12-13 03:19

    Using git and git-svn 1.7.1, it seems that the test I just did seems to work just fine.

    git svn init [url]
    git svn fetch
    

    you must then create and checkout a dummy branch to be able to push to the master branch.

    git checkout -b dummy
    

    Then you can clone it (git clone ...) into another pure git repo, modify it, commit it (git commit) then push (git push) into the git-svn repo.

    back to the git svn repo:

    git checkout master
    git svn dcommit
    

    will commit all git commits that have been pushed.

    0 讨论(0)
  • 2020-12-13 03:33

    One thing that may be causing you trouble is that git svn dcommit will rewrite all the commits it sends to SVN- at least if it's configured to add the SVN metadata note to the bottom of the commit messages. So you will have to adopt a flow where any repositories taking commits from your git-svn workspace rebase against it, losing all the merge history which can't be stored in SVN anyway.

    0 讨论(0)
  • 2020-12-13 03:36

    I have a bridge setup for some of my projects, but it's only one-way from git to svn (providing a public readonly SVN mirror of our git master branch). However, since it works fine it might help you or point you in the right direction in your two-way scenario anyway, as I assume it's git->svn that makes problems, not svn->git:

    My one-way scenario: Existing git repository at github, need a readonly svn mirror of the git master branch

    • Create and initialize the target subversion repository on the Server:

      svnadmin create svnrepo
      mkdir trunk
      svn import trunk svn://yoursvnserver/svnrepo
      rmdir -rf trunk
      
    • Create a mixed Git-Svn checkout and initialize subversion repository

      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
      
    • Update the mirror

      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
      

    This two articles from googlecode might help as well:

    • Importing from Git
    • Exporting to Git
    • Using Git with Google Code Hosting
    • Develop with Git on a Google Code Project
    0 讨论(0)
  • 2020-12-13 03:36

    If you're able to install custom hooks into Subversion repository, consider using SubGit.

    SubGit is a server-side solution that automatically synchronizes SVN and Git repositories. In order to install SubGit do the following:

        $ subgit configure $SVN_REPOS
        $ # Adjust $SVN_REPOS/conf/subgit.conf 
        $ #     to specify your branches and tags
        $ # Adjust $SVN_REPOS/conf/authors.txt 
        $ #     to introduce svn author names to their git counterparts
        $ subgit install $SVN_REPOS
        $ ...
        $ INSTALLATION SUCCESSFUL
    

    At this moment SubGit has installed hooks that are triggered by every svn commit and git push. This way SubGit converts any incoming modification.

    See also comparison with git-svn.

    0 讨论(0)
  • 2020-12-13 03:39

    As I've often said on #git:

    git-svn is like a flying car. Everybody wants a flying car, until they realize a flying car is pretty bad as either a car or a plane.

    The real solution is to get away from SVN entirely, as quickly as possible. Use git-svn for a one-time migrate, then move everyone over. Git is not that hard to learn.

    0 讨论(0)
提交回复
热议问题