以下命令
$ git co -b newbranch
$ git co oldbranch
导致“fatal: cannot exec 'git-co': Permission denied”错误。
同时,
$ git checkout -b newbranch
$ git checkout oldbranch
和
$ sudo git co -b newbranch
$ sudo git co oldbranch
按预期工作。 .git 文件夹的所有权是为拥有主文件夹的用户设置的,0755/0644 是 .git 文件夹/子文件夹/文件的模式。系统中的任何地方都没有 git-co
脚本(这是 git-checkout
的可扩展别名,位于/usr/libexec/git-core` 目录中) .
别名在主文件夹的 .gitconfig
中定义:
[alias]
co = checkout
root 或非特权用户的 git config -l
输出没有区别。仍然 sudo git co oldbranch
有效,而 git co oldbranch
无效。
我错过了什么?
Gentoo/内核 3.0.6/git 1.7.3.4
最佳答案
这个问题的正确答案实际上是不同的。在 git 运行别名之前,它会检查 $PATH
。如果目录不存在或缺少权限,git 会生成 "fatal: cannot exec 'git-co': Permission denied"
。它永远不会检查别名,所以 git foobar
会产生同样的错误。
git 邮件列表中的好人还让我想起了一个 strace
工具,它可以帮助找到返回 EACCES 的条目,如:strace -f -e execve git foobar
感谢来自 git 邮件列表的 Jeff King。 :)
关于导致 "Permission denied"错误的 git 别名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997700/