从一系列 git 命令中省略“git”

从一系列 git 命令中省略“git”

当我使用 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,你将无法访问它。因此,下一个微小的复杂性增加是将其设置为可以动态激活和停用别名。你可以这样做diffgit 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命令混合使用 — — 当然,除了您不能运行diff1

显然,这并不能神奇地解决全部 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等等)。gaddgit fetchgfetch

相关内容