26

I have a git post receive hook that will trigger a build on my build system. I need to create a string of the form "$repo-name + $branch" in the hook script.

I can parse the branch, but how can I get the repository name from git?

Thanks!

Jacko
  • 12,665
  • 18
  • 75
  • 126

4 Answers4

42

The "repository name" isn't a well-defined idea in git, I think. Perhaps what would be most useful is to return whatever.git in the case of a bare repository or whatever in the case of a repository with a working tree. I've tested that this bit of Bourne shell deals with both cases properly from within a post-receive hook:

if [ $(git rev-parse --is-bare-repository) = true ]
then
    REPOSITORY_BASENAME=$(basename "$PWD") 
else
    REPOSITORY_BASENAME=$(basename $(readlink -nf "$PWD"/..))
fi
echo REPOSITORY_BASENAME is $REPOSITORY_BASENAME

Update: if you want to remove the .git extension in the bare repository case, you could add a line to the first case to strip it off:

    REPOSITORY_BASENAME=$(basename "$PWD")
    REPOSITORY_BASENAME=${REPOSITORY_BASENAME%.git}
Mark Longair
  • 446,582
  • 72
  • 411
  • 327
1

You can inspect $GIT_DIR, or $GIT_WORK_TREE and get the repo name from there.

holygeek
  • 15,653
  • 1
  • 40
  • 50
0

If one is using Gitolite, the GL_REPO variable is available in the post-receive environment by default.

Josip Rodin
  • 725
  • 6
  • 13
0

You could do git rev-parse --show-toplevel, which will give you the path of the top-level directory, and pull the name out of that (reponame.git is conventional for remotely-accessible repos).

$PWD might also have the same information, but I'm unsure.

John Flatness
  • 32,469
  • 5
  • 79
  • 81
  • 1
    `git rev-parse --show-toplevel` won't work in a bare repository. (`$PWD` will be the top level of the working tree for a repository with a working tree, or the repository directory itself for a bare repository, so you need to do a little more work to get a helpful name...) – Mark Longair Apr 07 '11 at 16:07