2017-10-06 61 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如果你只是採用條件的第一部分,它只會在根目錄下工作。我會發布更新。 –