Yesterday Google Code Project Hosting shut down the ability for projects to add new downloads, just as they announced back in May. The reason they say, is because the “downloads have become a source of abuse”. I have no doubt they were having problems, but this move — basically killing Project Hosting instead of fixing it — shows that they really see no future in the product. I had some trouble with this back in March and a rather unpleasant experience trying to get Google to correct it.
It was perhaps no coincidence that GitHub less than two months later announced “releases”, finally making it possible to ship binaries to end users (they did have a downloads section for a while, which has since been removed). With this launch, GitHub is offering a lot more than Google has ever offered with Project Hosting.
Last weekend I spent some time to finally migrate my repositories over to Git and GitHub. All my repositories on Google were using Subversion, the first VCS that they offered (they now also offer Mercurial and Git). It has been clear for a while now that Git has won the DCVS fight, so this feels very familiar to the days when people were moving from CVS to Subversion.
GitHub suggests that you use svn2git to migrate from Subversion to Git. The only issue I had with this is that it is impossible to use it to migrate your Project Hosting-specific
/wiki directory, and I had a lot of trouble finding a good solution. Finally I stumbled over Google’s instructions on converting your repository from Subversion to Git. What I ended up using is a combination of the two.
You really only have one good option: import the
/wiki directory as a separate branch.
You could also import your
/wiki directory as a GitHub wiki, but they suck. Another option is to use
git subtree to add your
/wiki directory into your master branch, but I don’t recommend it.
First, use svn2git to transfer everything except your
/wiki directory. Your
/trunk will become your master branch,
/branches will become their own branches and
/tags will automatically be tagged. Be sure to build your
~/.svn2git/authors file first, and always run svn2git with the verbose flags, since otherwise you might not see important conversion errors. If your branches and tags are not correctly converted, watch out for this bug.
svn2git -v http://altdrag.googlecode.com/svn/
Then, use “
git svn clone” to transfer your
/wiki directory to its own little git repo. Use
--no-metadata to get the commit messages in the same format as svn2git.
git svn clone http://altdrag.googlecode.com/svn/wiki altdrag.wiki --authors-file=$HOME/.svn2git/authors --no-metadata
git branch -m doc
I also decided to rename my tags from the traditional “
altdrag-0.1” Subversion syntax to semantic versioning, commonly used with Git.
git tag v0.1 altdrag-0.1
git tag v0.2 altdrag-0.2
git tag -d altdrag-0.1 altdrag-0.2 ...
Now you should be all set to push your repository to GitHub. Create your repo on GitHub, then add it as a new remote and push everything.
git remote add origin firstname.lastname@example.org:stefansundin/altdrag.git
git push -u origin --all
git push --tags
Now all you have left to do is to move over your binaries to the release tags that were automatically created.
Update: GitHub actually has download counters, but the stats is only available through the API. E.g. search for “download_count” here: https://api.github.com/repos/stefansundin/altdrag/releases
I will still have to go back to Google Project Hosting from time to time during this transition. I still have lots of issue reports on Project Hosting that I intend to resolve there. And when I release the next version, I have to transfer the feature that checks if a new version has been released to GitHub.
It feels really good to finally move over to GitHub. Google Project Hosting was fun while it lasted, but I hereby pronounce it dead.