Git conversion

From K5Wiki
Revision as of 13:54, 21 October 2011 by Ghudson (talk | contribs) (New page: =Notes on converting from Subversion to Git= ==Content conversion== Most likely, bulk conversion of the Subversion repository will be done with git svn clone, as it was done for our krb5...)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Notes on converting from Subversion to Git

Content conversion

Most likely, bulk conversion of the Subversion repository will be done with git svn clone, as it was done for our krb5-anonsvn repository on github. Because of the way git uses SHA-1 hashes, it is desirable to make the conversion as clean as possible now, as doing any cleanup later will be disruptive to downstream repositories.

Author cleanup

Subversion commit authors are simply repository-local usernames. git commit authors contain a real name and username. git svn clone supports a map file mapping Subversion authors to git authors. We should prepare a map file containing the names of all historical Subversion authors, using @mit.edu addresses for all usernames.

Content outside of standard Subversion layout

Our Subversion repository contains some content outside of the standard trunk/tags/branches layout. By default git-svn will ignore this content. Branches can be added to the git-svn conversion by specifying multiple -b options to git svn clone; alternatively, the svn repository could be preprocessed (via dump and load) to move particular subdirectories into the branches directory. Branches can be easily renamed after conversion. (XXX How does git-svn handle conflicts in branch names during conversion?)

The top-level tools directory contains local work on external testing tools (gssmonger and gsstest). It is likely best to ignore these and create separate repositories for them.

The top-level ChangeLogs directory contains copies of the ChangeLog files which were removed from the tree in r17893 (2006-04-11). It is likely best to ignore this as well. The history of these deleted files will be present in the converted repository, and it is easier to access historical versions of deleted ChangeLog files in git than in svn.

The top-level users directory contains semi-private branches for individual developers. Branches which may be worth including in the converted repository include:

  • users/amb/referrals/trunk -- Client-side referrals (some notes are also present in the parent, but can probably be ignored in the conversion)
  • users/coffman/gic_opt_ext -- Extensible gic_opt structures
  • users/coffman/keyring -- Linux keyring ccache support
  • users/coffman/pkinit -- PKINIT preauth module
  • users/hartmans/pkinit -- Apple PKINIT
  • users/hartmans/fast -- FAST negotiation support
  • users/lhoward/aes-ccm -- AES-CCM cipher support (never merged due to issues with CCM and Kerberos)
  • users/lhoward/authdata -- authdata pluggable interface
  • users/lhoward/camellia-ccm -- Camellia-CCM cipher support (a predecessor of branches/camellia-ccm)
  • users/lhoward/gssextras -- Miscellaneous GSSAPI extensions
  • users/lhoward/gssextras-no-cqa -- A successor to the gssextras branch with one extension removed
  • users/lhoward/heimmig -- HDB KDB module
  • users/lhoward/iakerb-libkrb5-as-only -- krb5_init_creds_step and related APIs
  • users/lhoward/iakerb-refonly -- IAKERB support, without full support for the TGS path
  • users/lhoward/import-cred -- gss_krb5_import_cred support
  • users/lhoward/lockout -- Account lockout support
  • users/lhoward/lockout2 -- A successor to the lockout branch with the explicit lockout time attribute removed
  • users/lhoward/moonshot-mechglue-fixes -- Miscellaneous mechglue changes useful for Moonshot
  • users/lhoward/namingexts-mechglue -- gss_export_name_composite support
  • users/lhoward/s4u -- S4U2Self (protocol transition) and S4U2Proxy (constrained delegation) support
  • users/lhoward/s4u2proxy -- PAC-less S4U2Proxy support
  • users/lhoward/sasl-gs2 -- gss_inquire_saslname_for_mech/gss_inquire_mech_for_saslname support
  • users/lhoward/signedpath-naming-exts -- naming extensions support for signedpath authdata
  • users/raeburn/branches/network-merge -- shared code for kadmind and KDC network loop
  • users/raeburn/branches/syms -- restricted export lists for shared libraries

Branch and tag cleanup

Some of the branches in the repository are relics of the cvs-to-svn conversion and should be removed. These branch names begin with "unlabeled".


The existing github repository appears to have some revisions with invalid metadata which cause git filter-branch -- --all to abort. These arise from Subversion revisions like r8987 which were manufactured by cvs2svn to create tags, and do not have useful author or date fields. If we can identify all such revisions, we can work around the problem by editing the revision properties on the Subversion repository prior to conversion. Alternatively, we can remove those revisions from the git repository as they should all be leaves for very old tags.