From: Andrius V. <an...@ve...> - 2012-06-12 19:25:46
|
Hi everyone, I work with Leo in Newcastle and have a proposal to move CZT repository to a distributed version control system (DVCS), e.g. Git or Mercurial. Would like your comments about this :) Over the last year we have added some new features to CZT, including a transactional SectionManager, updated Eclipse plug-ins and support for Z/EVES theorem prover. It would be nice to release it all in a new CZT version. However, currently we have two branches in the repository. When we developed transactional SectionManager (which tracks key dependencies), we branched off the main SVN trunk. Now we need to merge back to release the code. From what I gather, SVN merging is trickier than in modern distributed version control systems (DVCS) and I am a bit afraid that if we move to a DVCS later, the merge history may get lost. Leo and I proposed to move to DVCS in an earlier email (and it was supported by Tim Miller). So what if we move CZT repository to DVCS (Git or Mercurial) now and merge afterwards, followed by a release of new CZT version. There are many benefits of using a DVCS and there are many "why" explanations on the web, e.g. here: http://blogs.atlassian.com/2012/02/version-control-centralized-dvcs/. SourceForge supports both Git and Mercurial so it is our choice which way CZT should go for. Both systems are comparable in functionality, so eventually it is the developer choice which we prefer to use. Again, there are MANY Git vs. Mercurial comparisons online, e.g. here (with links to more detailed arguments): http://www.atlassian.com/dvcs/overview/dvcs-options-git-or-mercurial I would like to start a developer poll about this :) Here is is my choice with some arguments following: - Git: +1 (Andrius) - Mercurial: 0 I choose Git over Mercurial because it suits my style better. I have used both for some time but Git emerged as my DVCS of choice. I am a fan of the "staging area" and partial commits. Sometimes I develop a couple things at the same time and may only want to commit parts of the changes as well-isolated commits. Together with nice UIs (I am using SourceTree on Mac) I am able to pick specific lines in files to commit. Furthermore, I like the lightweight branches and have benefitted frequently from the 'rebasing' and history rewriting when needed. When using Mercurial, similar things can be achieved with 'bookmarks' and 'mercurial queues', but the Git counterparts feel more like first-class citizens. I will not go far into details here. The worry about git's "history-destructive" changes can be alleviated with a change in working model. For example, student contributions could be achieved by them forking the main repository and then doing 'pull requests' ('merge requests' in SourceForge) thus avoiding giving write-access to the main repository. Furthermore, by default SourceForge Git repositories have the 'denyFastForwards' flag set, which disallows 'force' pushes that are destructive to the history. So history is safe in this case (also there should be a "policy" among developers to have no 'force' pushes). Finally, Git seems to have the edge in market share at the moment. Considering CZT toolchain, here is a quick glance: Maven - SVN with Git mirrors, CUP - SVN, JFlex - SVN, Eclipse - Git, jEdit - SVN/Git. So it looks like the ones which are moving to DVCS, are choosing Git. In the end, I am not 'allergic' to any of the DVCS choices and will be glad to go with the public choice. When decided, I could handle the repository move from SVN to the DVCS of choice in SourceForge. While on the similar topic, we could also migrate to the new SourceForge platform (named Allura). This would require admin rights though.. if everyone is ok with that. What do you think about the move? Which system would you prefer? Or maybe you are against DVCS and would like to stay with SVN? Best regards, ~Andrius Velykis |