GIT mirror and SVN repository cleanup

Started by manx, February 18, 2017, 20:11:43

Previous topic - Next topic


Rewriting History

I am currently in the process of providing a read-only git mirror of the OpenMPT Subversion source code repository.

In order to facilitate easier mirroring in git, it turned out to be useful to first canonicalize the Subversion repository as much as possible.
The Subversion repository had originally been a CVS repository and got converted to Subversion on 2006-03-14. In that conversion process, branch relationships got confused and misrepresented. Additionally, commits without author were introduced during the conversion. This fact and various other problems have been addressed and the folowing modifications have been made to the Subversion repository:

  • date back the earliest revisions to the actual release date of the source code of ModplugTracker 1.16
  • set Olivier as committer for ModplugTracker 1.16
  • fill-in various missing committers
  • provide a useful commit message for Olivier's source drop
  • in Subversion, old branches got deleted to make them invisible, this is not representable in git and thus, in order to make them reappear without weird commit dates, date back the deletion of old branches
  • as there exists meaningful history in open source releases before ModplugTracker 1.16, namely modplugxmms 1.0 to 2.0, add this code to the OpenMPT repository
  • add a variant of the very early OpenMPT modifications only found in a zip archive (MPT-1.16-noMMX)
  • up to about OpenMPT 1.17, OpenMPT was developed in a wild subdirectory which can make viewing history confusing, thus move all tags and branches to refer to this subdirectory directly
  • add a ton of old branches and tags for as many versions and variants as Saga Musix and I were able to identify unambiguously
  • add a new top-level folder devbranches where future development and experimental branches are supposed to be stored which makes it easier for the git conversion tool to skip those in the future
  • make the naming of all branches and tags consistent
  • in particular, the current 1.26-maintenance branch is renamed to OpenMPT-1.26
About half of these modifications modify ancient revisions and thus actually modifiy the history. Subversion does store this history information in revision properties on the old revisions and does not record the old state when doing modifications. As I did not want to actually lose information, I recorded all modifications to revision properties in freeform text inside the commit message of the respective revision.
I also made a backup of the Subversion repository before doing the modifications.

Actions required on SVN repository clients

If you are running a svnsync mirror of the repository, you are advised to resync ALL revision properties (use svnsync copy-revprops) in order to have the same state as the official repository.
If you have a working copy of the 1.26-maintenance branch, use svn switch


The actual git mirror will still take some days or weeks to setup. Please be patient and stay tuned.


GIT mirror is up and running with automated updates at

Warning: This repository may still get its history rewritten without any further notice while we are setting up the mirroring infrastructure. Be sure to rebase often in case you clone or fork it.

Building from git is also not yet supported (in particular, at least, the version number will be inaccurate).