UFO:Alien Invasion
Development => Coding => Topic started by: Punkie on November 19, 2010, 10:51:55 pm
-
It is kind of hard to refer to a particular revision in git. Not only are they 40 chars long (although the first 7 are quasi unique) but they are not a monotone increasing sequence. As a result ppl are not referring to version numbers anymore and it is hard for developers to remember a version or to know where in the timeline it is situated. But behold, numerous ppl value those same properties and they suggest the following
"git describe" as explained here (http://gitfu.wordpress.com/2008/05/25/git-describe-great-another-way-to-refer-to-commits) and here (http://www.kernel.org/pub/software/scm/git/docs/git-describe.html).
In short what i understood of it:
[punkie@fed ufoai]$ git describe --tags
ufoai_2.1-dev1-27183-g3be0bf3
This revision is 27183 commits seperated from the last tag (ufoai_2.1-dev1) which is identified by the first 7 chars "g3be0bf3". In other words, we can identify this revision as 27183 though we can reset the counter whenever we can. Via a hook this string can be added to the log.
-
Why not use unixtime
git log -1 --pretty=format:%ct
git log --since="1284280485" --until="1284280485"
will show you the last commit the build is based on
date --universal -ud @1284280862
convert sec to human readable format
.)You have growing values
.)You can recalculate the builddate
.)No extra work need to be done
-
How would you go from the date to a (single) hash/revision number (not a range) that git understand?
For "git describe" this is supported by git as the output is a valid revision number and thus can be used with other commands
#the revision
git checkout ufoai_2.1-dev1-27183-g3be0bf3
# list between 2 revisions before and the last
git rev-list HEAD ufoai_2.1-dev1-27183-g3be0bf3~2
-
> How would you go from the date to a (single) hash/revision number (not a range) that git understand?
git log --since="1290243726" --until="1290243726"
will return 2 commits
but only the commit time is different
the push time is the same (git stores the time in unix format)
If someone is pushing n commits at the same time
and you do an update
than you'll receive both commits
Tracing a bug means reverting commits from your local source
and in that case you know the hash
commit 51bc5eaaac472c0854ec34dbbdcf5b92982f471a
Author: Martin Gerhardy <tlh2000@users.sourceforge.net>
Date: Sat Nov 20 10:01:43 2010 +0100
* renamed functions in entity Observer class
commit 751f6534b9132255aee28d155312aa8c547e446a
Author: Martin Gerhardy <tlh2000@users.sourceforge.net>
Date: Sat Nov 20 09:53:15 2010 +0100
* further merges and improvements for the entity inspector
I would prefer
git describe --tags
ufoai_2.1-dev1-27253-g51bc5ea
commit 27253 is very handy
but
git rev-list HEAD ufoai_2.1-dev1-27253-g3be0bf3~2
prints only a lot of hashes
How to find the hash for commit 27252 ???
-
IANAGitExpert (I Am Not A Git Expert) and currently i dont have access to git.
AFAIK You dont need to look up the hash/sha1 because you can use the describe string as if it was a hash.
You can get from a sha1 to a tag decribe like experssion
% git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99^0~940
The other way around? Got to be a way I suppose.
git-show ??
or maybe a shell function is needed, like
git log ufoai_2.1-dev1-27253-g51bc5ea | egrep "^commit "
For functions like rev-list that return sha1 you can make a lookupscript that processes the output
foreach s sha1 (with egrep "^commit "?)
d=`git name-rev $e`
sed -e "s/$e/$d/"
...