我希望這破解是有幫助的人,從而在這裏張貼。它基於the answer這個問題。
我可以創建我自己的git命令~/bin/git-<custom command>
,但首選更改我現有的git別名,因爲我備份我的.gitconfig
。當提到<path>
(不需要cd ${GIT_PREFIX:-.}
)時,git命令具有在當前目錄中執行的優點。
我將替換選項邏輯引入助手fn options
。然後它被用於別名l
(log
),d
(diff
),dt
(difftool
)等等。我故意保留該文件夾在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>
「我不想只是創造git的別名此選項。」 – tehp
這幫助我拿出我的解決方案,將其標記爲答案。 – hIpPy
樂意幫忙! JW - 你最終結果是什麼,所以未來看到這個的人會知道嗎? – Pockets