Here is my workflow for combining my preference for git as a day-to-day VCS with the official Lucene Subversion repository.

make a fork

I have a public github fork of the official github mirror. The mirror is at git@github.com:apache/lucene-solr.git, my fork is at git@github.com:benson-basis/lucene-solr.git.

make a clone

I have a clone. I cloned git@github.com:apache/lucene-solr.git, and then I did git remote add fork git@github.com:benson-basis/lucene-solr.git. To have access to both branches, I created a remote tracking branch called fork-trunk.

create a JIRA and describe the task

setup in git to work on the task

   git checkout fork-trunk
   git pull origin trunk
   git checkout -b lucene-xxxx-some-description

Do the work

Create a github pull request from lucene-xxxx-some-description back to the mirror

Make sure that the JIRA # is in the PR title; this will cause the asf bot to pick up the PR and post an informative comment onto the JIRA.

Await review and act on review

Merge and Commit

I've found several scripts that purport to convert the output of git diff (or the '.patch' URL from github) into the input of svn patch. You can find one at https://gist.github.com/g-nix/7153630. In my experience, svn patch can be very cranky, and has been known to decide, for example, that all of the changes are Conflicts. If you merge down on git you can more or less safely just copy the modified files to svn. Watch out for moves/renames.

Be sure to follow the instructions to include the sentence:

This closes #PP.

in the SVN commit log message where 'PP' is the number of the pull request. This causes an ASF bot to close out the PR.

  • No labels