终端中出现“bash:__ gitdir:command not found”错误

时间:2011-11-29 17:01:12

标签: git bash terminal

每当我在命令窗口工作时,我得到错误:工作线正上方的“bash:__ gitdir:command not found”(换句话说,在任何命令之后,在它提示新的命令之前)

关于如何实现这一目标的任何想法?

4 个答案:

答案 0 :(得分:6)

__gitdirgit-completion.bash脚本提供的一个函数,它允许bash在您键入git命令时自动完成。您是否在__gitdir或其他个人资料/登录脚本中使用.bashrc而没有采购git-completion.bash

答案 1 :(得分:4)

您可能在.bashrc文件中调用了该命令。

尝试在其中搜索__gitdir:

$ grep __gitdir ~/.bashrc

或者发布其内容,可能更容易提供帮助。

答案 2 :(得分:0)

可以通过函数__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() { :; }

答案 3 :(得分:0)

这不会完全解决原始问题上下文,但对于从旧版本迁移的较新Ubuntu用户可能会有用...

我最近将旧的Ubuntu 12.04计算机升级到较新版本的Ubuntu,我开始发现因__git_dir设置错误导致PS1丢失的错误,如其他答案所述。为了理解为什么这个shell函数没有被定义,我认为我的.bashrc与最新的Ubuntu约定不是最新的。

我的旧版.bashrc基于旧的Ubuntu系统最初提供的版本,它有类似的内容:

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并且从此过后很高兴。