Re: How to tell if a file was renamed between two commits
In article <ron1-08A0F6.18483502022010@news.gmane.org>,
Ron Garret <ron1@flownet.com> wrote:
Show 33 quoted lines
> In article <20100203023219.GA13092@spearce.org>,
> "Shawn O. Pearce" <spearce@spearce.org> wrote:
>
> > Ron Garret <ron1@flownet.com> wrote:
> > > I'm trying to write a little utility that will extract all the revisions
> > > of a particular file. I start with a git rev-list HEAD -- filename, get
> > > the tree objects with git cat-file commit, the file objects with git
> > > ls-tree, and finally the file contents themselves with git cat-file
> > > blob. It works, except in the case where the file name was changed.
> > > git rev-list is smart enough to track those name changes, but my little
> > > revision tracker isn't. It dies when suddenly there is no file with the
> > > right name in the tree.
> > >
> > > So... is there an easy way to work around this? Is there a way to get,
> > > say, rev-list to tell me when the file it is tracking changed names? Or
> > > a git-diff incantation? I just need something that will tell me given
> > > two commits and a file name whether the file was renamed between those
> > > two commits and if so what its new name is. There must be an easy way
> > > to do this, but I can't figure out what it is.
> >
> > Maybe use the -M flag to git log, or the --follow flag to
> > log/rev-list?
>
> Nope. git log --follow will follow through a name change but won't
> actually say when the name changed happened or what the previous name of
> the file was.
>
> And actually playing around with it some more, it appears that git
> rev-list doesn't actually track file renames, or at least it doesn't do
> it all the time. Weird. I'm going to have to play around with this
> some more.
>
> rg
Ah, I think I found it:
git log --follow --raw -- [filename]
gives you e.g.:
:100644 100644 01e79c3... 01e79c3... R100 foo baz
which seems to be what I'm looking for.
rg