【发布时间】:2012-01-09 00:34:05
【问题描述】:
每当我在命令窗口中工作时,我都会在工作行的正上方收到错误:“bash: __gitdir: command not found”(换句话说,在任何命令之后,在提示输入新命令之前) .
有什么想法会引发这个问题吗?
【问题讨论】:
每当我在命令窗口中工作时,我都会在工作行的正上方收到错误:“bash: __gitdir: command not found”(换句话说,在任何命令之后,在提示输入新命令之前) .
有什么想法会引发这个问题吗?
【问题讨论】:
__gitdir 是git-completion.bash 脚本提供的一个函数,当您键入git 命令时,它可以让bash 自动完成。您是否在您的.bashrc 或其他配置文件/登录脚本中使用__gitdir 而不使用git-completion.bash?
【讨论】:
您的.bashrc 文件中可能有调用该命令的内容。
尝试在其中搜索 __gitdir:
$ grep __gitdir ~/.bashrc
或者发布它的内容,它可能会更容易提供帮助。
【讨论】:
可以通过__git_ps1函数启用花哨的git提示符,该函数可以嵌入到PS1中,并在每次打印提示符时调用。它是在采购特定但可能与定义__gitdir 的文件不同的文件时定义的。 __git_ps1(调用__gitdir)可能在/etc/bash_completion.d/git-prompt或/usr/share/git-core/contrib/completion/git-prompt.sh或/etc/bash_completion.d/git(等)...
但是,如果 __git_ps1 最终被定义,但 __gitdir 没有,那么您会收到此错误(每次打印提示时)。例如,如果__gitdir 在/etc/* 中定义,但__git_ps1 在/usr/share/* 中找到,那么在chroot 环境中,您最终可能会定义__git_ps1 但未定义__gitdir。
要“消除”错误消息,要么删除花哨的 git 提示符,要么直接定义它:__gitdir() { :; }
【讨论】:
这不会完全解决原始问题上下文,但可能对从旧版本迁移的新 Ubuntu 用户有用...
我最近将一台旧的 Ubuntu 12.04 机器升级到了较新版本的 Ubuntu,我开始看到由于我的 PS1 设置而缺少有关 __git_dir 的错误,正如其他答案所解释的那样。为了理解为什么不再定义这个 shell 函数,我认为我的 .bashrc 不是最新的 Ubuntu 约定。
我的旧 .bashrc 基于旧 Ubuntu 系统最初提供的 .bashrc 有类似的东西:
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi
而较新的 Ubuntu 系统创建的 .bashrc 文件首先尝试使用 /usr/share/bash-completion/bash_completion:
if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi
当我用新的替换旧的 bash 完成采购时,我得到了 __git_dir 的定义,并且从此很开心。
【讨论】: