2010-10-25 83 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'