Re: Adding files to a git-archive when it is generated, and whats the best way to find out what branch a commit is on?
- From
- demerphq <demerphq@gmail.com>
- Date
- Jul 29, 2009, 09:51 UTC
- Message-ID
- <9b18b3110907290251t4d8c83d3rf12d0ea9268c19bd@mail.gmail.com>
- In-Reply-To
- <adf1fd3d0907290233y78514f98h89a2fca7bf68b4f2@mail.gmail.com>
2009/7/29 Santi Béjar <santi@agolina.net>:
Show 20 quoted lines
> 2009/7/29 demerphq <demerphq@gmail.com>: >> 2009/7/29 Santi Béjar <santi@agolina.net>: >>> 2009/7/29 demerphq <demerphq@gmail.com>: >>>> Another question is whether anyone has any advice on the best way to >>>> find out the "best" branch an arbitrary commit is on. Where best can >>>> be flexibly definied to handle commits that are reachable from >>>> multiple branches. I have hacked a solution involving git-log and >>>> grep, but it performs quite poorly. I was wondering if there is a >>>> better solution. >>> >>> The "best" tag is easy: git describe commit. For branches I think you >>> could use "git name-ref --refs=refs/heads/* commit", because git >>> describe does not have a --branches flag. >> >> Dang, I guess this is from a newer release than mine. So now i have an >> excuse to upgrade. > > No, it is quite old (the --refs flag since the v1.5.1). If the problem > is that you don't find the "git name-ref" command is because it is > "git name-rev", oops.
Dang, guess i need a different excuse. :-)
But it doesn't seem to do what i need:
$ git name-rev --refs=refs/heads/* faa7dc9f4d3a618b0ad8b3c95edd54e24c6976e7 faa7dc9f4d3a618b0ad8b3c95edd54e24c6976e7 undefined
But i think that just because in this case I need remote refs:
git name-rev --refs=refs/remotes/* faa7dc9f4d3a618b0ad8b3c95edd54e24c6976e7 faa7dc9f4d3a618b0ad8b3c95edd54e24c6976e7 remotes/origin/maint-5.005~25
Which is definitely better. Can I safely strip the ~25 off the end to get the real branch name?
BTW, this is the shell version of what I'm currently using:
$ for b in $(git branch -r); do git log --pretty='format:%H' $b | grep faa7dc9f4d3a618b0ad8b3c95edd54e24c6976e7 && echo $b; done faa7dc9f4d3a618b0ad8b3c95edd54e24c6976e7 origin/maint-5.005
The main difference with the real code I use (in perl) is that I can specify the order of the branches to be searched, so that I can ensure that if its on two it is reported to be "from" the most likely candidate. And of course the perl version I use stops searching as soon as it finds a match.
Anyway, if I can reliably strip off the ~25 then this is a big step forward for me.
Thanks Santi, and of course thanks Johannes (author of name-rev).
cheers, Yves
-- perl -Mre=debug -e "/just|another|perl|hacker/"