linux 可以在没有git前缀的情况下运行git命令吗

h4cxqtbf  于 2023-10-16  发布在  Linux
关注(0)|答案(3)|浏览(124)

正如标题所说,是否可以启动一个 * 交互式 * git shell,其中所有命令都自动以git为前缀?
所以,不要做:

git fetch
git add
git commit

我希望能够做这样的事情:

git -i  #start the 'interactive' git shell, not the right command obviously

fetch   #does git fetch
add     #does git add
commit  #does git commit

git -x  #exit the 'interactive' git shell
jei2mxaa

jei2mxaa1#

我不认为这样的模式在git中是集成的。我建议你检查git-sh。您可以将其配置为使用您喜欢的别名。

sbtkgmzw

sbtkgmzw2#

如果你使用的是Bash shell,你可以设置一个“commandnotfound handler”,这是一个shell函数,当任何命令没有被识别时都会运行。如果你运行status而shell找不到这个命令,你可以使用它来尝试运行git-status

command_not_found_handle() {
    gitcmd=`git --exec-path`/git-$1 ;
    if type -a $gitcmd >/dev/null  2>&1 ;
    then
        shift ;
        exec $gitcmd "$@" ;
    fi ;
    echo "bash: $1: command not found" >&2 ;
    return 1 ;
}

这不会扩展git别名,它只识别作为可执行文件存在于GIT_EXEC_PATH目录中的命令,如/usr/libexec/git-core/git-status

master*% src$ pwd
/home/jwakely/src/foo/src
master*% src$ git status -s
 M include/foo.h
?? TODO
master*% src$ status -s      # runs 'git-status -s'
 M include/foo.h
?? TODO
master*% src$ git st         # a git alias
 M include/foo.h
?? TODO
master*% src$ st             # does not recognize git alias
bash: st: command not found

如果你想让它处理别名,但缺点是任何无法识别的命令(包括错别字)都会传递给Git,你可以让它变得更简单:

command_not_found_handle() { git "$@" ; }

master*% src$ st            # runs 'git st'
 M include/foo.h
?? TODO
master*% src$ statu         # runs 'git statu'
git: 'statu' is not a git command. See 'git --help'.

Did you mean one of these?
        status
        stage
        stash

相关问题