4

git で制御されたディレクトリ (実際にはホーム ディレクトリ) があり、その中には無視されたディレクトリ (ごみ箱スペースや他の VCS によって制御されているディレクトリなど) があります。ディレクトリがバージョン管理されているかどうか、および管理されている場合はどの VCS によって管理されているかを bash プロンプトに表示できるようにしたいのですが、たとえば、git rev-parse常に最上位の.gitディレクトリが検索されます。

追跡されていないディレクトリにいるかどうかをgitに尋ねる方法はありますか?

これが機能することがわかりました:

if ! git rev-parse 2>&/dev/null; then
    echo "not in git"
else
    PREFIX=$(git rev-parse --show-prefix)
    if [ -z "$PREFIX" ]; then
        echo "at git top level"
    elif [ -z $(cd $(git rev-parse --show-toplevel); \
          git ls-files -o --directory "${PREFIX%%/}")
        echo "tracked by git"
    else
        echo "untracked"
    fi
fi

ただし、非常にハックで壊れやすいようです。より良い方法はありますか?

4

3 に答える 3

5

git clean -ndアプローチ:無視されたディレクトリの場合はgit clean -d削除したいので、現在のディレクトリのステータスを確認する簡単な方法です。

if git clean -xnd `pwd` | grep 'Would remove \./' > /dev/null; then
    echo "Inside ignored or untracked directory"
else
    echo "Inside normal directory"
fi

微調整git cleanして、追跡されていないファイルに関するルールを変更します。$HOME リポジトリにチェックインしました。

注:軽く実験しgit cleanないでください。家の中のものを片付けることができます。-n

于 2012-05-31T20:51:24.390 に答える
-1

bash_completionと変更されたPROMPT_COMMANDを使用できます。カジュアルなテストではうまくいきましたが、壊れた場合は両方のピースを所有しています。:)

# Add this to your shell startup file (e.g. ~/.bashrc).
export PS1
export PROMPT_COMMAND='
    if fgrep -q "${PWD/\/home\/$LOGNAME\/}" ~/.gitignore; then
        PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w$(__git_ps1) [ignored]\$ "
    else
        PS1="${debian_chroot:+($debian_chroot)}\u@\h:\w$(__git_ps1)\$ "
    fi'

これを機能させるには、無視されたすべてのパスがホーム ディレクトリに相対的にリストされていることを確認する必要がありますrm -rf

于 2012-05-31T20:48:49.683 に答える