2017-10-06 64 views
1

我想推出:$ git status 当我cd到〜/工作自动启动命令时,cd到一个选定的目录

我想过把一个别名将CD我到工作目录,并启动git的状态,但我没有找到解决方案是最佳的。

+0

为什么不?这是一个简单的解决方案,可以让您控制结果。如果你不想要别名,那么我的下一个最好的临时解决方案将是一个非常丑陋的解决方案 - 我可能会设置一个陷阱调试以扫描最后执行的命令并运行'git status'(如果它是cd到*/work中。这是自动的,但受到bug和很多修补。 –

+0

我试图强迫自己制作脚本。 但我会做一个别名! – napoleon

+1

锻炼所有的bash肌肉! :D –

回答

3

添加到您的.bashrc

gitstatusinwork() { 
    if [[ "$PWD" != "$MYOLDPWD" ]]; then 
     MYOLDPWD="$PWD" 
     if [[ "$PWD/" = ~/work/* ]]; then 
      if [[ "$OLDPWD" != ~/work/* && "$INWORKDIR" == 0 ]]; then 
       git status 
      fi 
      INWORKDIR=1 
     else 
      INWORKDIR=0 
     fi 
    fi 
} 

export PROMPT_COMMAND="$PROMPT_COMMAND; gitstatusinwork" 

此功能只要执行git status您输入您~/work目录(或其任何子目录),则不会再显示出来,除非你走出~/work的目录并重新输入。

+0

谢谢你的完美。 – napoleon

+0

不要忘记接受做你想做的答案。 –

1

最简单的方法是:

cd ~/work && git status 

我不认为你正在寻找这虽然。

另一个选项是覆盖默认的cd命令。你可以在你的.bashrc.bash_profile文件的末尾放置一个bash的功能,像这样:

cd() { 
    builtin cd "$1" 
    # detect if the current directory is a git repository 
    if [ -d .git ] || git rev-parse --is-inside-work-tree 2> /dev/null > /dev/null; then 
    echo ""; git status 
    fi  
} 

我希望这有助于。

更新:

如果你只是想看看git status当你cd到您的回购协议的根源,你可以使用的条件,像这样的第一部分:

cd() { 
    builtin cd "$1" 
    # detect if the current directory is a git repository 
    if [ -d .git ]; then 
    echo ""; git status 
    fi  
} 
+0

谢谢,这很有趣,我不必为其他回购制作不同的别名。 我甚至没有考虑覆盖默认命令,下次我会记得这种可能性! – napoleon

+0

我喜欢这个。我认为这会让很多人疯狂,因为他们围绕回购协议内的目录跳跃,但我几乎从不这样做;我拥有扫描相关文件的别名,并使用相对路径打开它们,以便一个别名可以从回购根目录添加/提交/推送,并获取所有更改,而无需爬入和移出子目录。对我来说,这太棒了。 –

+0

@PaulHodges如果你只是采用条件的第一部分,它只会在根目录下工作。我会发布更新。 –