当我使用 git 时,我经常发现自己输入一系列以“git”开头的命令,后跟各种参数。
有没有办法进入“git 模式”,让我使用所有不带 git 前缀的 git 命令?
例如,不要输入以下命令:
git fetch
git status
git diff
git add file.txt
git commit
git push
我想改用:
enter-git-mode
fetch
status
diff
add file.txt
commit
push
exit-git-mode
答案1
如果您愿意一直处于“git 模式”,简单的答案就是输入以下命令:
alias fetch='git fetch'
alias status='git status'
alias diff='git diff'
alias add='git add'
alias commit='git commit'
alias push='git push'
到你的 中~/.bashrc
。但这可能不是你想要的,因为有一个名为 的常规命令,如果别名为1diff
,你将无法访问它。因此,下一个微小的复杂性增加是将其设置为可以动态激活和停用别名。你可以这样做diff
git diff
alias enter-git-mode="alias fetch='git fetch'; alias status='git status'; alias diff='git diff'; alias add='git add'; alias commit='git commit'; alias push='git push'"
alias exit-git-mode="unalias fetch status diff add commit push"
因此现在enter-git-mode
是一个定义前六个别名的命令(别名),并且exit-git-mode
是一个取消定义它们的命令。
如果需要,您可以将该长命令拆分为多行:
alias enter-git-mode="alias fetch='git fetch'; alias status='git status';
alias diff='git diff'; alias add='git add';
alias commit='git commit'; alias push='git push'"
alias exit-git-mode="unalias fetch status diff add commit push"
这使你可以像使用其他命令一样使用这些命令;例如,
date; status; date # A simple way of seeing how long a command takes.
time add .
commit &
commit && push
diff > differences.txt
和自动完成,并且您可以将常规 Unix/Linux 命令与git
命令混合使用 — — 当然,除了您不能运行diff
1。
显然,这并不能神奇地解决全部 git
命令。如果您想处理更多子命令(例如,archive
或), 则branch
需要将它们添加到别名中。________ 1除非键入或
/bin/diff
/usr/bin/diff
答案2
有一些工具可以做到这一点。其中之一是gitsh
,其 README.md 页面列出了更多。这比简单地添加git
到命令前面要多得多,但仍可能满足您的需求。
来自 README.md 的使用示例:
sh$ gitsh
gitsh% status
gitsh% add .
gitsh% commit -m "Ship it!"
gitsh% push
gitsh% ctrl-d
sh$
答案3
名为的 shell 脚本git-mode
可以完成这个任务:
#!/bin/bash
echo -n "> "
while read line; do
case $line in
fetch*) git fetch
;;
status*) git status
;;
# and so on
esac
echo -n "> "
done
实际上,我可能只会使用别名来git
保持g
灵活性(或,git add
等等)。gadd
git fetch
gfetch