Detect git Directory with Bash

By  on  

One interesting aspect of working at Mozilla is that Firefox lives in a mercurial repository while several other projects live on GitHub in a git repository. While most focus on either Firefox or another project, I switch between both, leaving me running git commands inside the mercurial repository and hg commands inside git repos. It's a frustration that I've lived with for a while so I sought to find a unified way of completing common tasks.

The first step was learning to detect git from command line:

if git rev-parse --git-dir > /dev/null 2>&1; then
  # git repo!
else
  # NOT a git repo!
fi

The if statement above detects a git repository, the else means the current directory is not inside a git repo.

One frequent task is checking out master and pulling the latest code from upstream, so I create an alias to do just that:

master() {
  if git rev-parse --git-dir > /dev/null 2>&1; then
    git checkout master && git pull upstream master
  else
    hg pull && hg checkout "last(public())"
  fi
}

This alias will save me time and frustration moving forward, and I'm sure I'll find other aliases to create based on git detection!

Recent Features

  • By
    Camera and Video Control with HTML5

    Client-side APIs on mobile and desktop devices are quickly providing the same APIs.  Of course our mobile devices got access to some of these APIs first, but those APIs are slowly making their way to the desktop.  One of those APIs is the getUserMedia API...

  • By
    CSS 3D Folding Animation

    Google Plus provides loads of inspiration for front-end developers, especially when it comes to the CSS and JavaScript wonders they create. Last year I duplicated their incredible PhotoStack effect with both MooTools and pure CSS; this time I'm going to duplicate...

Incredible Demos

  • By
    9 Mind-Blowing WebGL Demos

    As much as developers now loathe Flash, we're still playing a bit of catch up to natively duplicate the animation capabilities that Adobe's old technology provided us.  Of course we have canvas, an awesome technology, one which I highlighted 9 mind-blowing demos.  Another technology available...

  • By
    MooTools 1.2 Image Protector: dwProtector

    Image protection is a hot topic on the net these days, and why shouldn't it be? If you spent two hours designing an awesome graphic, would you want it ripped of in matter of seconds? Hell no! That's why I've created an image...

Discussion

  1. bryanYangGaoFei

    shell is powerful tool !

  2. Very true! Multiple projects on different repositories can be frustrating, especially if you keep messing up on the commands. Can you tell in more detail how to create an alias in Git bash? I haven’t used it a lot so I am not very familiar with it.

  3. Thanks a lot, I test this to fool it by creating empty folder/.git/config file and it complaint that not a git repository.

    I usually use

    -f .git/config

    .

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!