How do I get the file contents from an arbitrary revision to stdout?

4 messages, 3 authors, 2021-10-08 · open the first message on its own page

How do I get the file contents from an arbitrary revision to stdout?

From: Alan Mackenzie <hidden>
Date: 2021-10-08 17:58:02

Hello, git.

I want to get a file's content from a particular revision onto stdout for
backup purposes.  I can't see how to do this.  Help me, please!

Let's say the file is foo.c, and I want to get the version from the head
revision of bar-branch.

I would like there to be a command something like:

    $ git cat bar-branch -- foo.c

..  Is there such a command, and if so, what's it called and how do I use
it?  I assumed it might be git cat-file, but I couldn't get it to work,
and couldn't understand it's man page.

Where might I have found this information for myself?

Thanks in advance for the help!

-- 
Alan Mackenzie (Nuremberg, Germany).

Re: How do I get the file contents from an arbitrary revision to stdout?

From: Konstantin Ryabitsev <hidden>
Date: 2021-10-08 18:01:29

On Fri, Oct 08, 2021 at 05:51:17PM +0000, Alan Mackenzie wrote:
Hello, git.

I want to get a file's content from a particular revision onto stdout for
backup purposes.  I can't see how to do this.  Help me, please!

Let's say the file is foo.c, and I want to get the version from the head
revision of bar-branch.
git show bar-branch:foo.c

-K

Re: How do I get the file contents from an arbitrary revision to stdout?

From: Alan Mackenzie <hidden>
Date: 2021-10-08 18:15:03

Hello, Konstantin.

On Fri, Oct 08, 2021 at 14:01:23 -0400, Konstantin Ryabitsev wrote:
On Fri, Oct 08, 2021 at 05:51:17PM +0000, Alan Mackenzie wrote:
quoted
Hello, git.

I want to get a file's content from a particular revision onto stdout for
backup purposes.  I can't see how to do this.  Help me, please!

Let's say the file is foo.c, and I want to get the version from the head
revision of bar-branch.
git show bar-branch:foo.c
Thank you indeed.  That works just right!
-K
-- 
Alan Mackenzie (Nuremberg, Germany).

Re: How do I get the file contents from an arbitrary revision to stdout?

From: Jeff King <hidden>
Date: 2021-10-08 20:02:50

On Fri, Oct 08, 2021 at 05:51:17PM +0000, Alan Mackenzie wrote:
I would like there to be a command something like:

    $ git cat bar-branch -- foo.c

..  Is there such a command, and if so, what's it called and how do I use
it?  I assumed it might be git cat-file, but I couldn't get it to work,
and couldn't understand it's man page.
Konstantin pointed you at git-show, which is what I would have used. But
I just wanted to mention that you were on the right track. The
invocation you wanted was:

  git cat-file blob bar-branch:foo.c

or:

  git cat-file -p bar-branch:foo.c

(the "-p" is "pretty-print based on the object's type", so the two are
equivalent).
Where might I have found this information for myself?
You found the cat-file manpage, which I agree is a bit thick. An
Examples section would probably help a lot.

The other thing that might have helped is the gitrevisions(7) page,
especially the <rev>:<path> entry. Your example above to use "<revs> --
<pathspec>" was a good thought, but the path there is for limiting diffs
and traversals. What you want here is to specify the name of a single
object, and gitrevisions gives all the ways to do that.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help