Git Svn
From my old Git(hub) notes…
git and svn
Github and git
and really nice and despite git
’s additional
complexity, my preferred solutions for a few years now. Nevertheless,
subversion is still around and much used. Since some projects are
hosted by third parties using svn, but I still want to use Github, I
tried to initialise git
and checkout svn
in the same
directory. This hybrid versioning solution, which keeps the two
version controllers completely independent, seems to work quite
well. The only little tweaks are to ignore the respective .git
and
.svn
directories. The latter in easy with the .gitignore
file. Ignoring files in svn
is not that straightforward. One needs
to set properties
on the files/dirs to be ignores and, what was confusing to me,
commit
these to the server. Here are three posts
[1,
2,
3] that helped me to
realise how to this and will hopefully prove helpful next time I have
to repeat this.
git-svn
This is obviously the sophisticated solution, that enable to merge and
preserve the respective commit message. These
[1,
2]
were the most helpful resources. There is also of course the
Pro Git book with a git-svn
section. This documentation was
migrated to the Bioconductor BiocGithubHelp
wiki page.
Bitbucket to Github migration
Moving code from Bitbucket to Github is straightforward. But there is much more than just code in such a project. In my case, I had issues I really wanted to preserve, and I could not find any easy way to do it (as of the time of writing). There were scripts to migrate issues and bug tracking between different providers, but not exactly what I needed. Had to read about the respective APIs to do it manually, which was not too difficult. Briefly, here is a summary of what I did, more or less:
-
Download issues locally as described here. The issues need to be public, though.
curl https://api.bitbucket.org/1.0/repositories/:user/:repo/issues/1/ > myissue1.json
(where
:user
andrepo
are my/your user and repository names respectively). -
Unfortunately, the
json
issues are not compatible: Bitbucket’scontent
is calledbody
by Github (there might be more…). A bit ofperl
magic did the trick here.perl -pi -e 's/\"content\":/\"body\":/' issue*.json
-
Post the issues on Github following the API docs:
curl -u ":user:password" -X POST -d @issue1.json ttps://api.github.com/repos/:user/:repo/issues
It is far from perfect; comment were missing! Fortunately, there were only very few issues with relevant comments (most closing comments were fixed in version x.y.z), so I did not dig deeper. The above steps were embedded in a short shell script to automate the 30ish issues to be moved. Hope that next time I need to do this, somebody will have a great script ready, or at least this will prove helpful.