Options for replacing CVS for Horde Development Decision Introduction to distributed version control systems Description Requirements Must-haves Nice-to-haves The Contenders Bazaar Advantages Disadvantages Well-known users Git Setup Submodules Disk space Advantages Disadvantages Well-known users Mercurial Advantages Disadvantages Well-known users Subversion Well-known users Previous discussion re: migrating Horde to SVN: http://bugs.horde.org/ticket/5284 People Resource Utilization Comparison Ingo Beatnik Resources Bazaar Links Git Links Mercurial Links Options for replacing CVS for Horde Development Decision We have decided to keep the current history and structure in CVS, and create a new Git repository. Code will be committed to the Git repository as it is cleaned up for PHP 5 and Horde 4. Introduction to distributed version control systems http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/ http://www.infoq.com/articles/dvcs-guide Description This project is to determine what the next generation of the Horde will use to store and organize source code. Some initial work has been done with Git and SVN conversions of the current CVS repository. Requirements Must-haves Offline review of local changes Ability to hook into Whups for ticket updates from commit messages Stable, mature codebase Functional, usable user interface Nice-to-haves Submodule support Today checking out a Horde app within an existing Horde checkout works fine. This includes making single-commit changes across applications. * Browseable by Chora Naturally no matter what we choose Chora support will either be added or will improve. However if it is already supported by Chora all the better. The Contenders In alphabetical order... Bazaar Bazaar from Canonical (i.e. the ubuntu company) http://bazaar-vcs.org/ Advantages Seems to preserve the most metadata per-commit of any SCM listed here Disadvantages Somewhat specific to Launchpad/Ubuntu development process Well-known users Canonical/Ubuntu Git http://git.or.cz/ http://www.opensolaris.org/os/community/tools/scm/git-report-final.txt http://www.gitcasts.com/git-talk Setup #!/usr/bin/env sh cd /var/www/git/horde/ export CVSROOT=":pserver:cvsread@anoncvs.horde.org:/repository" FILES="agora ansel chora whups wicked" for FILE in $FILES do echo $FILE": " git-cvsimport -C$FILE $FILE done Submodules I added a git submodule for every horde module inside the horde/horde repository. Now you can do: git clone git://git.koch.ro/git/horde/horde cd horde git submodule init foreach modules as MODULE // Only those you want to use git submodule update $MODULE // checks out the module Now there are some more things[1] to think about when actually developing, but that's one way it could be done. http://git.or.cz/gitwiki/GitSubmoduleTutorial http://www.kernel.org/pub/software/scm/git/docs/git-submodule.html Disk space ls -C -w60 agora goops jonah nag swoosh ansel groupware juno nic trean chora hermes klutz occam turba CVSROOT horde kronolith passwd ulaform dimp hordedoc luxor pearweb update.sh forwards hordeweb merk presentations vacation framework imp midas sam vilma genie incubator mimp scry volos gitgc.sh ingo mnemo sesha whups gollem jeta mottle skeleton wicked /var/www/git/horde$ du -hs 928M Advantages Distributed nature allows offline commits and easy branching Disadvantages Does not preserve history across file or directory renames Aimed at large-scale codebases with emphasis on features for those users (ie. Linux Kernel) Well-known users Linux Kernel Mercurial Alternative distributed versioning control system. Advantages Distributed nature allows offline commits and easy branching Disadvantages Toolset possibly less mature than other products Well-known users OpenSolaris Subversion Chuck Hagenbuch has done some work on writing svn post-commit hooks. These likely can be reused for other SCM systems as well. Ben Klang has dome some test conversions of the CVS repository to SVN. The repository size is indeed much larger. In addition submodule support (as we use it today) has not been proven to the satisfaction of the developers. Well-known users Asterisk KDE Previous discussion re: migrating Horde to SVN: http://bugs.horde.org/ticket/5284 People While all Horde developers are interested in this project's final recommendation the following people have done work toward making a decision on the next SCM to be used for Horde: Ben Klang Chuck Hagenbuch Resource Utilization Comparison Ingo +----+-----------------------------+---------------+ |SCM |Full (Server) Repository Size|Branch Checkout| +====+=============================+===============+ |CVS |51MB |7MB | +----+-----------------------------+---------------+ |SVN |31MB |16MB | +----+-----------------------------+---------------+ |git*|18MB |18MB | +----+-----------------------------+---------------+ Beatnik +---------+-----------------------------+---------------+ |SCM |Full (Server) Repository Size|Branch Checkout| +=========+=============================+===============+ |CVS |736KB |700KB | +---------+-----------------------------+---------------+ |SVN | |1.7MB | +---------+-----------------------------+---------------+ |Mercurial| |724KB | +---------+-----------------------------+---------------+ Note that for Git, repo size and checkout size are the same. Resources Bazaar Links http://www.markshuttleworth.com/archives/125 Git Links http://git.or.cz/gitwiki/GitSvnComparsion http://git.or.cz/course/svn.html http://www.kernel.org/pub/software/scm/git/docs/gitcvs-migration.html http://www.kernel.org/pub/software/scm/git/docs/gittutorial.html http://www.kernel.org/pub/software/scm/git/docs/gittutorial-2.html http://www.kernel.org/pub/software/scm/git/docs/user-manual.html http://www.kernel.org/pub/software/scm/git/docs/glossary.html http://www.kernel.org/pub/software/scm/git/docs/everyday.html http://blog.moertel.com/articles/2007/12/10/how-i-stopped-missing-darcs-and-started-loving-git http://hopper.squarespace.com/blog/2008/7/5/converting-mercurial-to-git.html http://bergie.iki.fi/blog/feature_branches_in_midgard_development_with_git/ http://stackoverflow.com/questions/101752/aborting-a-merge-in-git Mercurial Links http://www.selenic.com/mercurial/wiki/ http://www.linux.com/feature/121157 http://www.opensolaris.org/os/community/tools/scm/dcm_evaluation_mercurial/ http://www.selenic.com/mercurial/wiki/index.cgi/HgWebDirStepByStep http://www.selenic.com/mercurial/wiki/index.cgi/PublishingRepositories Back to the Project List