Re: migrating from SVN to Git
Stephen Weeks <[email protected]> Sun, 3 Mar 2013 13:29:26 -0500
| Newsgroups | gmane.comp.lang.ml.mlton.devel |
|---|---|
| Message-ID | <CAJsFioX4E+KKTnBmU-Kyi45AnEkyR3OnLRzzgfSmzn1MKdAuoA@mail.gmail.com> |
I'm all for the transition. One thought -- perhaps we should switch to github for hosting the repos? On Sat, Mar 2, 2013 at 10:14 PM, Matthew Fluet <[email protected]>wrote: > At various times, the idea of migrating the MLton project sources from > Subversion to a DVCS has been raised. I've been using "git svn" for a > while and have had positive experiences with it, so I'd like to > migrate to Git. One particular reason for migrating now is that I'm > working with a few students on MLton related projects, and I would > like to support a more modern workflow and encourage > commits/reviews/revisions before merging into the public repository. > > For a while, I've been working on migrating the SVN repository to a > Git repository. While using "git svn clone" yields a reasonable > conversion, there are some definite "anomalies" in the resulting Git > repository. The major issue with a simple "git svn clone" conversion > is that the original CVS to SVN conversion seems to have had some > issues. See, for instance, the set of SVN branches that existing > immediately after the conversion: > > https://sourceforge.net/p/mlton/code/3925/tree/mlton/branches/ > > Another minor issue is that the resulting Git repository doesn't > reflect merges of branches into trunk. That is, the resulting Git > repository doesn't "feel" like a Git repository. > > So, I've developed a Makefile and a number of (ad-hoc) scripts to > handle the conversion, which are available from: > > http://mlton.org/misc/mlton-vcs-conversion.tgz > > Here are some of the high points: > > * The SVN repository is really comprised of four distinct lines of > development: "mlton" corresponds to the compiler-project proper; > "mltonlib" corresponds to the library project (see > http://mlton.org/MLtonLibraryProject); "talks" holds the > sources/slides from the 2006 ML Workshop talk; "tools" holds the > 'wiki' tool (which was used for command-line interaction with the > old MoinMoin wiki). I feel that it makes the most sense to split > the distinct lines of development into distinct Git repositories. > The following primarily concerns the SVN "mlton" directory, but > I've also converted the SVN "mltonlib" directory. > > * Went back to the original CVS repository to convert history from > before the CVS to SVN conversion. Although the CVS repo was taken > down on 20060809, a backup snapshot of the repository has been kept > around. > > * Use "cvs2ps" to generate an initial set of patches from the CVS > repository. The "cvs2ps" tool is used by "git cvsimport" for a > one-time import of a CVS repository. But, it is also possible to > direct "git cvsimport" to use the output of a run of "cvs2ps". I do > this in order to fix a few of the "issues" that arise in the > conversion of the CVS repo; presumably, some of these were what led > to the broken history in the CVS to SVN conversion (but, I also > believe that some of the CVS conversion tools have improved since > the time of the CVS to SVN conversion). Mainly, force the correct > branch on patches for which "cvs2ps" could not identify a branch. > > * Use "git svn clone" to import the SVN repository since r3924, which > corresponds to the last commit to the CVS repository. > > * Use the ".git/info/grafts" feature of "git" > (https://git.wiki.kernel.org/index.php/GraftPoint) to combine the > CVS and the partial-SVN histories. Also use ".git/info/grafts" to > introduce the various branch-to-trunk merges (and, for the > x86_64-branch, the various trunk-to-branch merges). > > * Regularize the naming convention of branches; this seems an > acceptable revision of history and lends some order to an > alphabetical listing of branches. In any cases, since there are no > extant active branches, all branches are moved to a > "refs/archived/heads/" namespace (which isn't copied by default in > a "git clone"). > > * Turn the various CVS and SVN tags for public releases into git > annotated tags. The "git cvsimport" turned CVS tags into git > lightweight tags, while the "git svn clone" turned SVN tags into > git branches (with a single, empty-diff commit). > > * Drop the remaining CVS and SVN tags. Most of these from CVS > corresponded to many fine-grained experimental releases (which were > purged from the SVN repository, see: > https://sourceforge.net/p/mlton/code/4256/). The remaining from > CVS and SVN corresponded to branch and merge points, which are > fairly easily recovered in git, so explicit tags seem unnecessary. > > * Use "git filter-branch" to make the ".git/info/grafts" parentages > permanent. Also, rewrite the "git-svn-id: ..." metadata appended > to every SVN commit by "git svn clone" to a simple "SVN rNNNN" > message. This makes it fairly easy to find the git commit > corresponding to a SVN commit via a "git log --grep='SVN rNNNN'" or > "git rev-list --grep='SVN rNNNN'". > > > I've pushed the resulting Git repositories to (temporary) Git > repositories on SourceForge: > https://sourceforge.net/p/mlton/on-20130302-svn2git-mlton > https://sourceforge.net/p/mlton/on-20130302-svn2git-mltonlib > which can be cloned with: > git clone git://git.code.sf.net/p/mlton/on-20130302-svn2git-mlton mlton > git clone git://git.code.sf.net/p/mlton/on-20130302-svn2git-mltonlibmltonlib > After ironing out any remaining issues with the conversion, I'll > delete these temporary Git repositories and push to permanent Git > repositories on SourceForge (with more concise mount points). > Ultimately, I intend to mirror the final Git repositories from > SourceForge to GitHub (and BitBucket?). > > > There are a small number of known limitations with the conversion. > > * Each distinct username in the CVS and SVN repositories is converted > to a single git user.name and user.email; for the e-mail address, I > used a person's current or last known e-mail address. That is, the > e-mail address that appears in the Git repository may not > correspond to the e-mail address that the author was using at that > point in history. Given date ranges for authors, it wouldn't be > difficult to set e-mail addresses during the "git filter-branch" > step, but I'm not sure that it is worth the trouble. (And, I > suspect that I am the author who has transitioned through the most > e-mail addresses and I'm fine with using my current e-mail > throughout the Git repository.) > > * As is well known, SVN can track empty directories while Git does > not track empty directories. > > * For the mlton Git repository, looking at the tagged public > releases, this only affects the "package/freebsd/files" > directory, and for trunk/master, this also affects the > "mlton/cm", "mlton/codegen/bytecode", and "runtime/bytecode" > directories. But, these three directories were intended to be > deleted; they weren't because I emptied the directories on a > "git svn clone". > > * For the mltonlib Git repository, looking at trunk/master, this > doesn't affect any directories. But, it was common practice in > this development to commit a directory hierarchy without files, > so there are a number of empty-diff commits in the Git > repository. I experimented with using "git svn"'s features for > tracking directories, but the resulting history looked a bit > "noisy" with placeholder files. > > > Anyways, I'm looking for feedback on the decision to migrate to Git > and on the conversion. > > > ------------------------------------------------------------------------------ > Everyone hates slow websites. So do we. > Make your web apps faster with AppDynamics > Download AppDynamics Lite for free today: > http://p.sf.net/sfu/appdyn_d2d_feb > _______________________________________________ > MLton-devel mailing list > [email protected]; [email protected] > https://lists.sourceforge.net/lists/listinfo/mlton-devel > ------------------------------------------------------------------------------ Everyone hates slow websites. So do we. Make your web apps faster with AppDynamics Download AppDynamics Lite for free today: http://p.sf.net/sfu/appdyn_d2d_feb _______________________________________________ MLton-devel mailing list [email protected]; [email protected] https://lists.sourceforge.net/lists/listinfo/mlton-devel