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

6 messages from 2021-10-08 to 2021-10-08. Participants: Alan Mackenzie, Konstantin Ryabitsev, Jeff King, Junio C Hamano.
Thread: https://gitlist.dev/t/56668

## Alan Mackenzie, 2021-10-08 17:51

Subject: How do I get the file contents from an arbitrary revision to stdout?
Message-ID: <YWCFFcNeNVTYcELN@ACM>
URL: https://gitlist.dev/e/YWCFFcNeNVTYcELN%40ACM

```
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).

```

## Konstantin Ryabitsev, 2021-10-08 18:01

Subject: Re: How do I get the file contents from an arbitrary revision to stdout?
Message-ID: <20211008180123.ls62virahqthgpmb@meerkat.local>
URL: https://gitlist.dev/e/20211008180123.ls62virahqthgpmb%40meerkat.local
In-Reply-To: <YWCFFcNeNVTYcELN@ACM>

```
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

```

## Alan Mackenzie, 2021-10-08 18:15

Subject: Re: How do I get the file contents from an arbitrary revision to stdout?
Message-ID: <YWCKpH5ER1Z9Xm3E@ACM>
URL: https://gitlist.dev/e/YWCKpH5ER1Z9Xm3E%40ACM
In-Reply-To: <20211008180123.ls62virahqthgpmb@meerkat.local>

```
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:
> > 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).

```

## Jeff King, 2021-10-08 20:02

Subject: Re: How do I get the file contents from an arbitrary revision to stdout?
Message-ID: <YWCj6NqMrxksN1V8@coredump.intra.peff.net>
URL: https://gitlist.dev/e/YWCj6NqMrxksN1V8%40coredump.intra.peff.net
In-Reply-To: <YWCFFcNeNVTYcELN@ACM>

```
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

```

## Junio C Hamano, 2021-10-08 21:54

Subject: Re: How do I get the file contents from an arbitrary revision to stdout?
Message-ID: <xmqqtuhri3mc.fsf@gitster.g>
URL: https://gitlist.dev/e/xmqqtuhri3mc.fsf%40gitster.g
In-Reply-To: <YWCj6NqMrxksN1V8@coredump.intra.peff.net>

```
Jeff King <peff@peff.net> writes:

>   git cat-file -p bar-branch:foo.c
>
> (the "-p" is "pretty-print based on the object's type", so the two are
> equivalent).

IIRC, "cat-file -p" doesn't do textconv, but "show" would, and
depending on the use case the difference may matter.

```

## Jeff King, 2021-10-08 23:01

Subject: Re: How do I get the file contents from an arbitrary revision to stdout?
Message-ID: <YWDM0HASo7VMwnz1@coredump.intra.peff.net>
URL: https://gitlist.dev/e/YWDM0HASo7VMwnz1%40coredump.intra.peff.net
In-Reply-To: <xmqqtuhri3mc.fsf@gitster.g>

```
On Fri, Oct 08, 2021 at 02:54:51PM -0700, Junio C Hamano wrote:

> Jeff King <peff@peff.net> writes:
> 
> >   git cat-file -p bar-branch:foo.c
> >
> > (the "-p" is "pretty-print based on the object's type", so the two are
> > equivalent).
> 
> IIRC, "cat-file -p" doesn't do textconv, but "show" would, and
> depending on the use case the difference may matter.

Sorry, I should have been more clear. I meant that the two cat-file
invocations are equivalent (using "blob" versus "-p").

I agree that for human consumption, "show" is preferable.

-Peff

```
