Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
111 lines (70 sloc) 3.55 KB

Moving SVN repositories to Github

There is now an easier solution to import an existing package, see https://import.github.com/new

Instructions made for svn.plone.org/collective.

You have two options, calling directly git svn clone or use svn2git

Here is an example session of moving collective.logbook to GitHub

Prerequisites

install svn2git (https://github.com/nirvdrum/svn2git):

  • on OSX Mountain Lion / Macports:

    sudo port install git-core +svn
    sudo port install rb-rubygems
    sudo gem install svn2git
    
  • On ubuntu:

    sudo apt-get install git-core git-svn ruby rubygems
    sudo gem install svn2git
    
  • Generic: install svn2git as a Ruby gem:

    sudo gem install svn2git / su -c 'gem install svn2git'
    

Make a proper git-svn fork

You can automate this step using plone-collective-svn2git.sh in this repository.

  • Set your product name to be available in shell

    export PRODUCTNAME="collective.logbook"
    
  • Working directory:

    mkdir -p ${PRODUCTNAME}/${PRODUCTNAME} && cd ${PRODUCTNAME}/${PRODUCTNAME}
    
  • Create repository on Github in your dashboard. Choose "collective" as the owner.

  • Grab the log from your addon and note the start and env revisions here we have : start:78034 / end:246764:

    svn log -q http://svn.plone.org/svn/collective/${PRODUCTNAME} > ../LOG
    
  • Optional but recommended: Remap authors commiters to FullName <email>

    • Take care of remapping to github accounts fullname/email pairs if they exists:

      cat ../LOG | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > ../authors-transform.txt
      cat ../authors-transform.txt
      ...
      maurits = maurits <maurits>
      ...
      
    • Edit the authors file:

      $ED ../authors-transform.txt
      ...
      maurits = Maurits van Rees <m.van.rees@zestsoftware.nl>
      ...
      
  • Run svn2git Note: the following takes 30+ minutes to complete on fast internet connection, as it walks through every of 150k+ commits in Collective SVN

    • To not grab all collective revisions, we will compute the last and first revisions and give them to svn2git with:

      export REVS="$(tail -n2 ../LOG|head -n1|awk '{print $1}'|sed "s/r//"):$(head -n2 ../LOG|tail -n1|awk '{print $1}'|sed "s/r//")"
      
    • Verify:

      echo $REVS
      
    • If you have the authors file:

      svn2git --authors ../authors-transform.txt --revision $REVS -v http://svn.plone.org/svn/collective/${PRODUCTNAME}
      
    • If you do not have the authors file:

      svn2git --revision $REVS -v http://svn.plone.org/svn/collective/${PRODUCTNAME}
      

Push code to github / Backup the old one

  • After migrating, push the git-svn checkout to github:

    git remote add origin git@github.com:collective/${PRODUCTNAME}.git
    git push -u --all
    git push --tags
    
  • Move old trunk:

    cd ..
    svn mv -m "Moved to github" https://svn.plone.org/svn/collective/${PRODUCTNAME}/trunk https://svn.plone.org/svn/collective/${PRODUCTNAME}/trunk.old
    svn mkdir -m "Moved to github" https://svn.plone.org/svn/collective/${PRODUCTNAME}/trunk
    svn co https://svn.plone.org/svn/collective/${PRODUCTNAME}/trunk/ ${PRODUCTNAME}.old
    cd ${PRODUCTNAME}.old
    echo "Repo moved to https://github.com/collective/${PRODUCTNAME}" > MOVED-TO-GITHUB.txt
    svn add MOVED-TO-GITHUB.txt
    svn commit -m "Added Github moved notice"