2017-02-02 72 views
1

我發現自己使用--name-status選項很多,git log,git diff,git show。我知道git別名,但它們只適用於命令或命令和/或選項的組合。我不要只想爲此選項創建git別名。有沒有辦法爲git選項創建快捷方式或別名

# l is an alias for log with pretty format 
git l --name-status 

所以我可以做這樣的事情,其中​​--ns是快捷方式--name-status

git l --ns 

更新:見my own answer爲不同的考慮。

回答

1

除非修改源代碼來識別的其他標誌,最好的辦法可能是使用別名來重寫標誌:

[alias] 
    l = "!l() { : git log ; git log $(echo \"[email protected]\" | sed \"s/--ns/--name-status/\") ; } && l" 

或者,你可以在bash定義一些別名g會爲你做這個(你可以配置自動完成這個工作,但我不記得怎麼做,把我的頭頂部):

function g { 
    git $(echo "[email protected]" | sed "s/--ns/--name-status/") 
} 
+0

「我不想只是創造git的別名此選項。」 – tehp

+0

這幫助我拿出我的解決方案,將其標記爲答案。 – hIpPy

+0

樂意幫忙! JW - 你最終結果是什麼,所以未來看到這個的人會知道嗎? – Pockets

0

我不認爲aliasing命令行參數是可能的。

1

我希望這破解是有幫助的人,從而在這裏張貼。它基於the answer這個問題。

我可以創建我自己的git命令~/bin/git-<custom command>,但首選更改我現有的git別名,因爲我備份我的.gitconfig。當提到<path>(不需要cd ${GIT_PREFIX:-.})時,git命令具有在當前目錄中執行的優點。

我將替換選項邏輯引入助手fn options。然後它被用於別名llog),ddiff),dtdifftool)等等。我故意保留該文件夾在gitconfig而不是一個shell腳本,因此一切都在一個地方。向該fn添加新選項也很容易。

cd ${GIT_PREFIX:-.}需要承認<path>作爲shell命令執行的git別名(see this)。這對git log很重要。

請注意,shell命令將從存儲庫的頂級目錄 執行,該存儲庫可能不一定是當前目錄。

我已經擁有別名log,diff,difftool。不可能有git別名或自定義git命令來覆蓋內置的git命令,並且不想爲show創建一個,因此我排除了git show

前:

[alias] 
    l  = !"cd ${GIT_PREFIX:-.} && git lg2" 
    d  = diff 
    dt  = difftool 
    lg2  = # alias for log 

後:

[alias] 
    l  = "!f() { cd ${GIT_PREFIX:-.} && git lg2 $(git options "[email protected]"); }; f" 
    d  = "!f() { cd ${GIT_PREFIX:-.} && git diff $(git options "[email protected]"); }; f" 
    dt  = "!f() { cd ${GIT_PREFIX:-.} && git difftool $(git options "[email protected]"); }; f" 
    lg2  = # alias for log 
    #workaround: helper fn to alias options 
    options = "!f() { \ 
       echo "[email protected]" \ 
        | sed 's/\\s/\\n/g' \ 
        | sed 's/^--ns$/--name-status/' \ 
        | sed 's/^--no$/--name-only/' \ 
        | xargs; \ 
      }; f" 

所以,現在我可以這樣做:

git l --ns 
git d head~ --ns 
git dt head~ --ns 

# with paths: 
git l --ns -- <path> 
git d head~ --ns -- <path> 
git dt head~ --ns -- <path> 
相關問題