Peek inside your Git repo with rev-parse

If you write a lot of Git hooks or use Git heavily in scripts, rev-parse may be the subcommand you always wanted without knowing you wanted it.
2 readers like this.
Person using a laptop

I use Git a lot. In fact, there's probably an argument that I sometimes misuse it. I use Git to power a flat-file CMS, a website, and even my personal calendar.

To misuse Git, I write a lot of Git hooks. One of my favorite Git subcommands is rev-parse, because when you're scripting with Git, you need information about your Git repository just as often as you need information from it.

Getting the top-level directory

For Git, there are no directories farther back than its own top-level folder. That's in part what makes it possible to move a Git directory from, say, your computer to a thumb drive or a server with no loss of functionality.

Git is only aware of the directory containing a hidden .git directory and any tracked folders below that. The --show-toplevel option displays the root directory of your current Git repository. This is the place where it all starts, at least for Git.

Here's an obvious example of how you might use it:

$ cd ~/example.git
$ git rev-parse --show-toplevel
/home/seth/example.git

It becomes more useful when you're farther in your Git repo. No matter where you roam within a repo, rev-parse --show-toplevel always knows your root directory:

$ cd ~/example.git/foo/bar/baz
$ git rev-parse --show-toplevel
/home/seth/example.git

In a similar way, you can get a pointer to what makes that directory the top level: the hidden .git folder.

$ git rev-parse --git-dir
/home/seth/example.com/.git

Find your way home

The --show-cdup option tells you (or your script, more likely) exactly how to get to the top-level directory from your current working directory. It's a lot easier than trying to reverse engineer the output of --show-toplevel, and it's more portable than hoping a shell has pushd and popd.

$ git rev-parse --show-cdup
../../..

Interestingly, you can lie to --show-cdup, if you want to. Use the --prefix option to fake the directory you're making your inquiry from:

$ cd ~/example.git/foo/bar/baz
$ git rev-parse --prefix /home/seth/example.git/foo --show-cdup
../

Current location

Should you need confirmation of where a command is being executed from, you can use the --is-inside-work-tree and --is-inside-git-dir options. These return a Boolean value based on the current working directory:

$ pwd
.git/hooks
$ git rev-parse --is-inside-git-dir
true

$ git rev-parse --is-inside-work-tree
false

Git scripts

The rev-parse subcommand is utilitarian. It's not something most people are likely to need every day. However, if you write a lot of Git hooks or use Git heavily in scripts, it may be the Git subcommand you always wanted without knowing you wanted it.

Try it out the next time you invoke Git in a script.

What to read next
Tags
Seth Kenlon
Seth Kenlon is a UNIX geek, free culture advocate, independent multimedia artist, and D&D nerd. He has worked in the film and computing industry, often at the same time.

1 Comment

Amazing a good deal of beneficial information

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.