I'm interested in numbering the commits on a git branch that is imported from CVS, so there's a well defined linear order (unlike in git in general).
I hacked together this script:
#!/bin/bash COMMITCOUNT=$( git rev-list origin | wc -l) echo There are $COMMITCOUNT commits on the origin branch # this strips whitespace export COUNT=$(($COMMITCOUNT)) git rev-list origin | while read commitid ; do echo numbering $commitid as $COUNT TAG=cvs$COUNT git tag $TAG $commitid COUNT=$(( $COUNT -1)) done
which works like this:
$ ./number-cvs There are 205 commits on the origin branch numbering fea9db3bc7b3e36f82a97d3bb194eb60ecb3b57f as 205 numbering aedbfe81cc1dbf3d6f833225aa41826854398a3c as 204 numbering f040d23565211acb637d3325d240d675fe1e61a6 as 203 numbering eef4a46ce30de2836402a373e8eae49fc1b75935 as 202 numbering 2bb5b931be9beb0d90a2796b85585149465f8fc3 as 201 numbering a4372569c60bcb6d92a63b258389b5f1a210dd40 as 200 fatal: tag 'cvs200' already exists numbering bbd6af71ef17fcb05a9cf86a372837dcf470e30b as 199 fatal: tag 'cvs199' already exists numbering 6e1dc4d7d59b3515a3f46c17517c1bb85172c7bc as 198 fatal: tag 'cvs198' already exists numbering 87c59d4b1bf4c7b1bcb64af078a66290d74f6ebf as 197 fatal: tag 'cvs197' already exists [...]
This being a hack, I don't attempt to handle previously tagged revisions and instead let
git tag
give a fatal error that isn't really fatal...Now I end up with commit tags that look like
cvs200
, cvs201
, ...
Maybe you want to look at git-describe if you have at least one tag.
ReplyDeleteGives output like v1.0.4-14-g2414721 which means 14 commits after v1.0.4 and after this a shortened global revision.
The best of both worlds, like mercurial i think.
There aren't any CVS tags on that repo - so I use git describe, but that gives the base tag as the cvsNNN tag, plus any non-CVS modifications I've made locally.
ReplyDeleteSticking a tag on the beginning of the tree and letting git describe do the numbering from that seems like an interesting idea, though.