代码之家  ›  专栏  ›  技术社区  ›  Léo Léopold Hertz 준영

在zsh提示Git时获得额外信息

  •  0
  • Léo Léopold Hertz 준영  · 技术社区  · 15 年前

    托瓦尔兹似乎 the following prompt .

    [torvalds@g5 git]$ 
    

    第一个词是用户名。 g5 似乎是git repo的一个分支,而 git 显示它是Git中的一个分支。

    我当前的提示

    PROMPT="$"
    

    你怎么能有和Torvalds类似的提示?

    6 回复  |  直到 15 年前
        1
  •  4
  •   mipadi    15 年前

    实际上,我猜 g5 指他当前正在使用的计算机的主机名,以及 git 是当前工作目录。格式 [user@hostname dir]$ 是一个相当标准(即广泛使用的)shell提示。

        2
  •  3
  •   ephemient    15 年前

    Git's integration with Bash programmable completion 提供名为的函数 __git_ps1 .

    如果你改变你的 PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' (在你的 .bashrc 或者其他一些交互源文件),并且不进行进一步的自定义,您的提示将如下所示:

    [user@host ~]$ cd /usr/src/linux
    [user@host linux ((v2.6.30))]$
    
        3
  •  2
  •   Jakub Narębski adamtaub    15 年前

    如果你使用 ZSH (而不是更受欢迎的狂欢),看看 VCS info in prompts Xana Yammering关于使用的博客文章 vcs_info Frank Terbeck为zsh开发的子系统,后端为git。

        4
  •  1
  •   Jorge Israel Peña    15 年前

    就像埃弗米特说的,你会想拥有它的。 Git bash script installed ,安装说明位于文件顶部附近。您也可以查看 Github guide page 为此。值得注意的是,只有在git目录中,分支才会出现。例如,这是我的正常提示: blaenk@macbook:~ $ 当我在git目录中时,提示如下: blaenk@macbook:~/code/iphone/DIFM (master*)$

    如果仔细观察,它显示分支的部分master后面有一个星号。这表示存在未分级的更改;如果进行了更改,则会显示+号。这很有帮助。要做到这一点,你基本上必须 GIT_PS1_SHOWSTASHSTATE 到非空状态。例如在你的 ~/.bashrc ~/.bash_profile ,输入以下内容:

    export GIT_PS1_SHOWDIRTYSTATE=true
    

    现在,当您转到一个git目录时,您应该看到指示器是否有任何未分页的更改或者是否有任何阶段性的更改。您可以通过编辑一个文件来快速测试这个问题。星号应该出现。然后,可以通过执行以下操作将文件还原为原始状态:

    git checkout -- the/file.txt
    

    顺便说一下,这个自动完成的bash脚本也非常棒。最后你可以做一些类似于“git-chec”的事情,然后按tab键,它会自动完成结帐,例如,你也可以自动完成分支名称。

    您最可能感兴趣的其他一些资源有以下几点,这些资源将引导您完成按所需方式对提示进行格式化的过程,如果需要,还可以为某些部分添加颜色,这可以使提示更具可读性和信息性。试着不要做得太过分。

        5
  •  0
  •   kenchew    8 年前

    在搜索过程中遇到这个问题。只是想分享一个新的解决方案。

    Liquid Prompt 允许对zsh提示符进行许多自定义,包括显示git分支和为git存储库的不同状态进行各种着色。

        6
  •  -1
  •   Léo Léopold Hertz 준영    15 年前

    我终于找到了下面的工作

     function get_git_branch { 
       git branch | awk '/^\*/ { print $2 }
     }
     function get_git_dirty { 
       git diff --quiet || echo '*'
     }
     function get_git_prompt { 
       git branch &> /dev/null || return 1 
       echo "($(get_git_branch)$(get_git_dirty)) "
     }
     PROMPT="$(get_git_prompt)\$ "
    

    Source