2010-10-25 50 views
16

我试图通过添加这些行到我的~/.gitconfig文件设置一些git的别名:Git的别名问题

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

当我走在终端中运行以下命令:git st,我得到以下错误fatal: cannot exec 'git-st': Not a directory。我不知道问题是什么,我已经在网上查找,但无法找到它为什么这样做。我使用Git 1.7.1运行Mac OS 10.6.4。有人请帮助我。如果我不知道为什么这样做,我会发疯的!谢谢!

+0

'混帐status'正常工作,对不对? – Cascabel 2010-10-25 23:51:07

+0

是的。所有正常的命令都能正常工作,只是提示错误的别名。 – agentbanks217 2010-10-26 00:21:45

+0

'git config alias.st'打印'status'吗? – 2010-10-26 00:28:47

回答

17

unutbu正确地指出,以git-osx-installer issue 53,其中规定:

基本上,我在路为/root/bin,并没有该目录的权限。

有趣的是,这不是git 1.6.3的问题,但它是1.7.0和1.7.1。

一个strace -f -eexecve git st 2>&1 | grep EACC可以帮助看看目录的问题是:

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

(在这种情况下,/usr/games/bin/

Another way找到有问题的路径是:

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

一个我的无效项目实际上是一个NFS安装的目录,我没有权限访问,因为我没有通过Kerberos对公司NFS服务器进行身份验证。
删除PATH中的那一项可以解决问题,'git stat'(我的身份别名)现在可以使用。


PeterT提到的,你可能没有strace提供(如在Solaris中or OsX,如“Equivalent of strace -feopen <command> on mac os X”详细描述)的意见,在这种情况下dtruss是一个很好的等价物。

dtruss -f -t execve git st 2>&1 | grep EACC 
+1

修复它!我在我的'〜/ .bash_profile'中查找了我的路径中的一个流浪项目,我找到了它,将它移除了,并且它工作正常。非常感谢! – agentbanks217 2010-11-05 23:35:50

+0

如果你没有strace:'dtruss -f -t execve git st 2>&1' – 2012-02-09 16:36:58

+0

@PeterT:好点。我已经将它包含在答案中以提高可见性。 – VonC 2012-02-09 20:47:24

6

我有这个问题,但也有微妙的不同原因:

在我的情况的路径包含这是一个文件,而不是一个目录中的条目。文件本身及其目录的权限都很好。当一个新的终端被加载时,文件可以从任何地方运行。但是,git给出了一个相同的错误信息。

因此,以及在具有不正确的权限的路径上查找文件夹,我建议任何其他人与此问题还检查该路径只指向文件夹,而不是文件。

+0

谢谢,那帮了我。 – Ciryon 2012-10-07 21:22:03

0

安装Foundation后在OSX中发现了同样的问题。

我的.bash_profile 中的违规行是格式错误的基础导出路径。我没有在行尾删除/ foundation,所以它指向一个二进制文件,而不是文件夹。

只是修复它,重新加载终端和一切工作再次。

0

我也有同样的问题,这是一个格式错误的.bash_profile行。

当我安装WP_CLI,它增加了以下行到我的.bash_profile

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

我不得不作出它的微小变化。我正在使用CentOs。

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

这解决了我的问题。

0

Git也有一个内置的别名命令。

实例别名命令:

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'