16

I was trying to set up some git aliases by adding these lines to my ~/.gitconfig file:

[alias]
  st = status
  ci = commit
  br = branch

And when I go to run these commands in the terminal: git st, I get the following error fatal: cannot exec 'git-st': Not a directory. I do not know what the problem is and I have looked online and cannot find why it is doing this. I am running Mac OS 10.6.4 using Git 1.7.1. Somebody please help me out. If I don't figure out why it is doing this, I'll go crazy! Thanks!

Ether
  • 53,118
  • 13
  • 86
  • 159
ab217
  • 16,900
  • 25
  • 74
  • 92
  • `git status` works correctly, right? – Cascabel Oct 25 '10 at 23:51
  • Yeah. All of the normal commands work fine, it's just the aliases that prompt that error. – ab217 Oct 26 '10 at 00:21
  • Does `git config alias.st` print `status`? – Josh Lee Oct 26 '10 at 00:28
  • 3
    Perhaps it is related to this issue? http://code.google.com/p/git-osx-installer/issues/detail?id=53#c5 – unutbu Oct 26 '10 at 01:00
  • Any ideas on what in my PATH would be conflicting with git? I basically have in my PATH, macports, RVM (Ruby Versioning Manager), a path to the my Ruby installation, and a path to ~/bin which is a custom folder I store my binaries in. – ab217 Oct 27 '10 at 17:34
  • I had same issue. after wrong editing .bash_aliases. after fixing - all was right – ajahongir Apr 09 '14 at 03:57

5 Answers5

17

unutbu correctly pointed out to the git-osx-installer issue 53, which states:

Basically, I had /root/bin in my path and didn't have permissions for that directory.

Interestingly, this was not a problem with git 1.6.3, but it was with 1.7.0 and 1.7.1.

A strace -f -eexecve git st 2>&1 | grep EACC can help see what directory is the problem:

[pid 6469] execve("/usr/games/bin/git-st", ["git-st"], [/* 72 vars */]) = -1 EACCES

(in this instance, the /usr/games/bin/)

Another way to find the path with the problem is:

echo $PATH |tr ':' '\n' |xargs ls -ld

One of my invalid items is actually an NFS mounted directory that I don't have permission to access because I have not authenticated via Kerberos to the corporate NFS server.
Removing that one item from the PATH fixes the issue, and 'git stat' (my alias for status) now works.


PeterT mentions in the comment that you might not have strace available (like in Solaris or OsX, as detailed in "Equivalent of strace -feopen < command > on mac os X"), in which case dtruss is a good equivalent.

dtruss -f -t execve git st 2>&1 | grep EACC
Community
  • 1
  • 1
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
  • 1
    That fixed it! I looked in my `~/.bash_profile` for a stray item in my path, I found it, removed it, and it worked. Thanks a lot! – ab217 Nov 05 '10 at 23:35
  • If you don't have strace: `dtruss -f -t execve git st 2>&1` – Peter T Feb 09 '12 at 16:36
  • @PeterT: good point. I have included it in the answer for more visibility. – VonC Feb 09 '12 at 20:47
  • Not sure if I can add an example to this comment, but I have the same problem as OP but when I ran all 3 of the commands given above, nothing popped out. `$ bash --version && git --version GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu) Copyright (C) 2005 Free Software Foundation, Inc. git version 1.7.12` – jackrabb1t Mar 10 '14 at 00:29
  • Fixed. I ran `echo $PATH |tr ':' '\n' |xargs ls -ld` and out shown a particular entry to be 'Not a directory'. I removed that from path and ran `source ~/.bashrc`. Now git alias is working. – Ramraj Jun 03 '15 at 07:27
6

I had this problem too but with a subtly different cause:

In my case the path contained an entry that was a file rather than a directory. The permissions on the file itself and its directory were fine. When a new terminal was loaded the file could be run from anywhere. However, git gave an identical error message.

So as well as looking for folders on the path with incorrect permissions I suggest anyone else with this problem also checks that the path points only to folders and not to files.

0

Found the same problem in OSX after installing Foundation.

The offending line in my .bash_profile was a malformed foundation export path. I didn't remove the /foundation at the end of the line, so it was pointing to a binary file, not a folder.

Just fixed it, reloaded Terminal and everything worked again.

xavi
  • 104
  • 2
0

I had the same problem too, and this was a badly formatted .bash_profile line.

When I installed WP_CLI, it added the following line to my .bash_profile

export PATH=/root/.wp-cli/bin:$PATH

I had to make a slight change for it. I'm using CentOs for that matter.

export PATH=$PATH:/root/.wp-cli/bin

This fixed my problem.

Omar Abid
  • 15,753
  • 28
  • 77
  • 108
-1

Git also has a built in alias command.

Example alias commands:

git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.br branch
git config --global alias.lola 'log --graph --decorate --pretty=oneline --abbrev-commit --all'
ciaranodc
  • 398
  • 4
  • 16