2012-07-03 17 views
1

的文件夾上禁用git aware zsh主題我對使用oh-my-zsh附帶的git插件感到非常滿意,但是我還沒有弄清楚如何將函數添加到檢查初始化的git repo(即檢查.git文件夾),如果返回false,則不顯示分支名稱或狀態。這是一個偉大的插件,但它確實減慢殼,我想有它關閉上的文件夾中90%...如何在沒有.git/

# get the name of the branch we are on 
function git_prompt_info() { 
    ref=$(git symbolic-ref HEAD 2> /dev/null) || return 
    echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" 
} 


# Checks if working tree is dirty 
parse_git_dirty() { 
    local SUBMODULE_SYNTAX='' 
    if [[ $POST_1_7_2_GIT -gt 0 ]]; then 
     SUBMODULE_SYNTAX="--ignore-submodules=dirty" 
    fi 
    if [[ -n $(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null) ]]; then 
    echo "$ZSH_THEME_GIT_PROMPT_DIRTY" 
    else 
    echo "$ZSH_THEME_GIT_PROMPT_CLEAN" 
    fi 
} 


# Checks if there are commits ahead from remote 
function git_prompt_ahead() { 
    if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then 
    echo "$ZSH_THEME_GIT_PROMPT_AHEAD" 
    fi 
} 

# Formats prompt string for current git commit short SHA 
function git_prompt_short_sha() { 
    SHA=$(git rev-parse --short HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" 
} 

# Formats prompt string for current git commit long SHA 
function git_prompt_long_sha() { 
    SHA=$(git rev-parse HEAD 2> /dev/null) && echo "$ZSH_THEME_GIT_PROMPT_SHA_BEFORE$SHA$ZSH_THEME_GIT_PROMPT_SHA_AFTER" 
} 

# Get the status of the working tree 
git_prompt_status() { 
    INDEX=$(git status --porcelain 2> /dev/null) 
    STATUS="" 
    if $(echo "$INDEX" | grep '^?? ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_UNTRACKED$STATUS" 
    fi 
    if $(echo "$INDEX" | grep '^A ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" 
    elif $(echo "$INDEX" | grep '^M ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_ADDED$STATUS" 
    fi 
    if $(echo "$INDEX" | grep '^ M ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" 
    elif $(echo "$INDEX" | grep '^AM ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" 
    elif $(echo "$INDEX" | grep '^ T ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_MODIFIED$STATUS" 
    fi 
    if $(echo "$INDEX" | grep '^R ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_RENAMED$STATUS" 
    fi 
    if $(echo "$INDEX" | grep '^ D ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" 
    elif $(echo "$INDEX" | grep '^AD ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_DELETED$STATUS" 
    fi 
    if $(echo "$INDEX" | grep '^UU ' &> /dev/null); then 
    STATUS="$ZSH_THEME_GIT_PROMPT_UNMERGED$STATUS" 
    fi 
    echo $STATUS 
} 

#compare the provided version of git to the version installed and on path 
#prints 1 if input version <= installed version 
#prints -1 otherwise 
function git_compare_version() { 
    local INPUT_GIT_VERSION=$1; 
    local INSTALLED_GIT_VERSION 
    INPUT_GIT_VERSION=(${(s/./)INPUT_GIT_VERSION}); 
    INSTALLED_GIT_VERSION=($(git --version)); 
    INSTALLED_GIT_VERSION=(${(s/./)INSTALLED_GIT_VERSION[3]}); 

    for i in {1..3}; do 
    if [[ $INSTALLED_GIT_VERSION[$i] -lt $INPUT_GIT_VERSION[$i] ]]; then 
     echo -1 
     return 0 
    fi 
    done 
    echo 1 
} 

#this is unlikely to change so make it all statically assigned 
POST_1_7_2_GIT=$(git_compare_version "1.7.2") 
#clean up the namespace slightly by removing the checker function 
unset -f git_compare_version 

回答

1

你應該寫的如果超出聲明腳本如果你不在git文件夾中。

if [ ! -d $PWD/.git ]; then 
    exit # or your exit function, like return 
0

有一種替代的框架,更新僅在需要時,即當改變目錄(chpwd掛機)或者當運行git命令git的信息:zsh-git-prompt。請注意,它需要Python。把它作爲插件集成到oh-my-zsh中應該不難。

我在我的分支中做出的關鍵更改是允許您設置包含插件文件的目錄(__GIT_PROMPT_DIR)。