# Decompressing a tree to a location other than the working directory

4 messages from 2010-08-06 to 2010-08-07. Participants: Joshua Shrader, Jonathan Nieder, Jakub Narebski, Michael Witten.
Thread: https://gitlist.dev/t/24649

## Joshua Shrader, 2010-08-06 18:43

Subject: Decompressing a tree to a location other than the working directory
Message-ID: <AANLkTi=RjcQ_-PNUt781jhYEA-8krqXpdHRenVyR_Rc4@mail.gmail.com>
URL: https://gitlist.dev/e/AANLkTi%3DRjcQ_-PNUt781jhYEA-8krqXpdHRenVyR_Rc4%40mail.gmail.com

```
git checkout allows one to checkout a particular version of a certain
path in the working directory.  Are there accessible plumbing commands
that can be used to accomplish the same thing, but change the target
directory.  For example, if I wanted to checkout a certain path, but
wanted to check it out somewhere external to my working directory /
repository?

Thanks,

Josh

```

## Jonathan Nieder, 2010-08-06 18:43

Subject: Re: Decompressing a tree to a location other than the working directory
Message-ID: <20100806184345.GB2985@burratino>
URL: https://gitlist.dev/e/20100806184345.GB2985%40burratino
In-Reply-To: <AANLkTi=RjcQ_-PNUt781jhYEA-8krqXpdHRenVyR_Rc4@mail.gmail.com>

```
Joshua Shrader wrote:

> git checkout allows one to checkout a particular version of a certain
> path in the working directory.  Are there accessible plumbing commands
> that can be used to accomplish the same thing, but change the target
> directory.

I don’t know if it is plumbing, but "git archive" is very useful for
that.

 $ git archive HEAD^:Documentation | (cd elsewhere && tar xf -)

Hope that helps,
Jonathan

```

## Jakub Narebski, 2010-08-06 19:58

Subject: Re: Decompressing a tree to a location other than the working directory
Message-ID: <m3mxszo6na.fsf@localhost.localdomain>
URL: https://gitlist.dev/e/m3mxszo6na.fsf%40localhost.localdomain
In-Reply-To: <AANLkTi=RjcQ_-PNUt781jhYEA-8krqXpdHRenVyR_Rc4@mail.gmail.com>

```
Joshua Shrader <jshrader83@gmail.com> writes:

> git checkout allows one to checkout a particular version of a certain
> path in the working directory.  Are there accessible plumbing commands
> that can be used to accomplish the same thing, but change the target
> directory.  For example, if I wanted to checkout a certain path, but
> wanted to check it out somewhere external to my working directory /
> repository?

Porcelain way: check out first example in git-archive(1) manpage

  EXAMPLES
  ========

  git archive --format=tar --prefix=junk/ HEAD | (cd /var/tmp/ && tar xf -)

       Create a tar archive that contains the contents of the latest commit
       on the current branch, and extract it in the /var/tmp/junk directory.

Plumbing way: after preparing index (it can be separate file than .git/index),
use "git checkout-index" as desceived in second example on manpage:

  EXAMPLES
  ========


  Using `git checkout-index` to "export an entire tree"

        The  prefix  ability  basically  makes  it trivial to use git check-
        out-index as an "export as tree" function.  Just  read  the  desired
        tree into the index, and do:

          $ git checkout-index --prefix=git-export-dir/ -a

        `git checkout-index` will "export" the index into the specified direc-
        tory.

        The final "/" is important. The exported name is literally just pre-
        fixed  with  the  specified string


-- 
Jakub Narebski
Poland
ShadeHawk on #git

```

## Michael Witten, 2010-08-07 03:10

Subject: Re: Decompressing a tree to a location other than the working directory
Message-ID: <AANLkTi=iApfmo3HhDU9BgxvJuHJwuDc=nHFpOib9TM8x@mail.gmail.com>
URL: https://gitlist.dev/e/AANLkTi%3DiApfmo3HhDU9BgxvJuHJwuDc%3DnHFpOib9TM8x%40mail.gmail.com
In-Reply-To: <20100806184345.GB2985@burratino>

```
On Fri, Aug 6, 2010 at 13:43, Jonathan Nieder <jrnieder@gmail.com> wrote:
>> git checkout allows one to checkout a particular version of a certain
>> path in the working directory.  Are there accessible plumbing commands
>> that can be used to accomplish the same thing, but change the target
>> directory.
>
> I don’t know if it is plumbing, but "git archive" is very useful for
> that.
>
>  $ git archive HEAD^:Documentation | (cd elsewhere && tar xf -)

For single files (rather than directories), you could do this:

  git show HEAD^:path/to/file > /some/path/file

```
