11

セットアップに関して、絞り込めないように見えるいくつかの奇妙な動作があります。

シェルで問題なくタブ補完を使用しています (私のシェルは ですzsh)。私が抱えている問題は、gitコマンドを発行した後のタブ補完に関するものです。

例 1 (正常に動作):

新しいディレクトリを作成し、そこに移動してgit init. 私はそれからtouch hello.rb。にgit add <tab>変更しgit add hello.rbます。

例 2 (機能しません):

私は実際にはそれほど大きくないRailsアプリを使用してgit add G<tab>いますGemfile..ctrl-c

Killed by signal in __git_complete_index_file after 159s

私が使用しているzshで:

# completion
autoload -U compinit
compinit

他の誰かがこの問題を抱えていますか? 回避できますが、何か間違ったことをしている必要があり、他にどこを見ればよいかわかりません。

物事のバージョン:

git version 2.1.2
zsh 5.0.7
iTerm2 Build 2.0.0.20141103

アップデート:

Git v 2.2.0 ではこの問題が修正されているため、この問題が発生している場合はアップグレードしてください。

4

1 に答える 1

7

RVMまたはそのようなツールを使用していると思います。

現在の git (2.1.3) 以前のバージョンに同梱されている git-completion.bash にはバグがあり、RVM が使用されているディレクトリでファイル補完を一覧表示するときに無限ループが発生します。

この無限ループの原因は、chpwd_functionsRVM およびその他のツールによって行われた の変更です。

ファイルの一覧表示に使用されるメソッドのみに影響する git-comletion.bashのパッチを見つけました。__git_ls_files_helperパッチは を無視するchpwd_functionsため、これらの無限ループは省略されます。

要するに:__git_ls_files_helper関数は次から変更する必要があります:

__git_ls_files_helper ()
{
  (
    test -n "${CDPATH+set}" && unset CDPATH
    cd "$1"
    if [ "$2" == "--committable" ]; then
      git diff-index --name-only --relative HEAD
    else
      # NOTE: $2 is not quoted in order to support multiple options
      git ls-files --exclude-standard $2
    fi
   ) 2>/dev/null
}

に:

__git_ls_files_helper ()
{
  (
    test -n "${CDPATH+set}" && unset CDPATH
    (( ${+functions[chpwd]} )) && unfunction chpwd
    (( ${#chpwd_functions} )) && chpwd_functions=()
    setopt chaselinks
    builtin cd "$1" 2>/dev/null
    if [ "$2" == "--committable" ]; then
      git diff-index --name-only --relative HEAD
    else
      # NOTE: $2 is not quoted in order to support multiple options
      git ls-files --exclude-standard $2
    fi
  ) 2>/dev/null
}

詳細については、Github の RVM の問題に関するディスカッションを参照してください。git-completion.bash の場所は、git のインストール方法によって異なります。Homebrewを使用する場合、場所は次のようなものです

/usr/local/Cellar/git/<git version>/etc/bash_completion.d/

他のシステムで、または他のパッケージマネージャーを使用している場合、通常は次のようになります

/opt/local/etc/bash_completion.d

git-completion.bash の詳細については、git-scm.com ブックの 2.7 章にある Git のヒントとコツを参照してください。

アップデート:

Git v 2.2.0 ではこの問題が修正されているため、この問題が発生している場合はアップグレードしてください。

于 2014-11-16T11:45:01.647 に答える