如何避免在每个Git命令的开头输入“ Git ”?

我想知道是否有一种方法可以避免在每个Git命令的开头输入单词__abc0。

如果有一种方法可以在打开命令提示符进入“ Git模式”后,只在开始时使用一次git命令,那就太好了。

例如:

git>

之后,我们输入的每个命令都默认解释为Git命令。

与我们使用MySQL shell编写数据库命令的方式类似:

mysql>

这将使我不必每天数百次输入git

注意:我在Windows上使用的是git-bash

25124 次浏览

这并不是您所要求的,但您可以在__abc0中为您最常用的Git命令设置一些shell别名:

alias commit='git commit'
alias checkout='git checkout'
...

另请注意,您可以在Git内部创建别名:

git config --global alias.ci commit
git config --global alias.co checkout
...

这使您可以键入git ci而不是git commit,依此类推。

你可能想试试吉特什。从他们的自述文件:

gitsh程序是Git的交互式shell.在gitsh中,您可以发出任何Git命令,甚至可以使用本地别名和配置。

  • Git命令往往是成组出现的。通过在专用的Git shell中运行它们,避免一遍又一遍地输入__abc0:
sh$ gitsh
gitsh% status
gitsh% add .
gitsh% commit -m "Ship it!"
gitsh% push
gitsh% ctrl-d
sh$

或者看看这里链接的其他项目:

  • GIT-SH——一个自定义的bash shell,带有Git提示符、别名和完成。
  • 吉特什——一个用Perl编写的简单的Git shell.
  • 雷普尔-在REPL中使用子命令包装任何程序。

注意:我自己没有用过这个。

一个Perl单行程序,它将执行以下操作:

perl -nE 'BEGIN {print "git > "} system "git $_"; print "git > "'

这将执行您键入的任何内容,并以git作为前缀。它会一直这样做,直到你达到^D

这是另一种方法。这也不是我所要求的,但我已经用了一段时间了,它很不错。将以下行添加到~/.bashrc中:

complete -E -W git

现在,在空的bash提示符下按Tab键将输入“ git ”。

在您的示例中,您将其与MySQL提示符进行比较。其工作方式是启动一个MySQL进程,然后向该进程发出命令。因此,为什么不用你选择的语言写一些类似的东西呢?下面是一个简单的C++示例:

#include <iostream>
#include <cstdlib>


int main(int argc, char *argv[]){
while(true){
std::cout << "git> ";
std::cout.flush();
std::string command;
std::getline(std::cin, command);
if(command == "exit") break;
std::system("git " + command);
}


return 0;
}

请注意,我只是凭记忆写的,我没有用编译器检查它。可能会有一些小的语法错误。

我非常喜欢在~/.bash_配置文件中为我的GitBash使用别名。如果您采用这种方法,下面是我最喜欢的一些方法:

# git
alias gw='git whatchanged'
alias gg='git grep -n -C8'
alias ggi='git grep -i -n -C8'
alias gb='git branch'
alias gbd='git branch -D'
alias gba='git branch -a'
alias gc='git checkout'
alias gcp='git cherry-pick'
alias gfo='git fetch origin'
alias s='git status'
alias gmom='git merge origin/master'
alias grom='git rebase origin/master'
alias gpom='git pull origin master'
alias pplog='git log --oneline --graph --decorate'

另一种适用于任何命令的方法是:使用Ctrl+R(反向搜索)。

反向搜索允许您搜索命令历史记录。在按下搜索字符串后重复Ctrl+R,以使用相同的字符串继续重复搜索。

您只需键入一次命令,然后就可以从该命令的任何子字符串中重新调用该命令。在大多数情况下,您只需使用两到三个适当的搜索字母,就可以回忆起整个非常长的命令及其各种变体。除了正常使用Shell外,不需要任何预配置,并且它可以根据您使用Shell的方式进行自适应,只需键入完整的命令一次,这些命令就会自动添加到您的命令历史记录中。

  • git commit --amend<Ctrl+R>am
  • git pull<Ctrl+R>pu
  • git rebase --rebase-merges -i --onto origin/develop origin/develop feature/blue-header<Ctrl+R>blu
  • git rebase --abort<Ctrl-R>ab
  • git rebase --continue<Ctrl-R>con
  • docker-compose stop && git pull && make && docker-compose up -d<Ctrl-R>up
  • 等等

此外,Ctrl-R不仅适用于Bash,还适用于许多使用Readline库的程序(有很多这样的程序),如Python Shell、IPython、MySQL Shell、pSQL Shell、IRB(Ruby)等。

我的一个朋友做了一个小的bash脚本来实现这一点。它叫做回答

$ replify git
Initialized REPL for [git]
git> init
Initialized empty Git repository in /your/directory/here/.git/


git> remote add origin https://your-url/repo.git


git> checkout -b new-branch
Switched to a new branch 'new-branch'


git> push

简介:

如果你愿意,你可以为git创建自己的CLI,我写了一个脚本来解决这个问题。诺吉特是一个简单的Python脚本,以防止不必要的重复";Git";关键字。

更新(23/06/2022):

在这次更新的时候,这个答案是3年1周6天。我已经回来并修复了由诺吉特./git可执行文件和实际的git可执行文件引起的冲突错误,并对.history文件的行为进行了一些小的更改。该项目的GitHub页面及其相关文章(链接到该项目的GitHub页面)也已更新。

安装:

要运行nogit,您需要在系统上安装Python 3。您可以从官方存储库下载脚本或复制下面的源代码。

注意:该脚本依赖于系统奥斯信号在出口处读线子进程模块。

安装说明(Linux):

如果需要,可以删除.py扩展名并将其转换为可执行文件:

mv nogit.py nogit
chmod +x ./nogit
./nogit # open the NoGit CLI

您还可以将此脚本移动到./bin/目录中,并为其创建一个别名,以便在没有./的情况下运行该脚本:

sudo cp ./nogit /bin/nogit
sudo chmod +x /bin/nogit
alias nogit="/bin/nogit"

或者,您可以将以下命令复制到CLI中:

git /bin/nogit && sudo chmod +x /bin/nogit && alias nogit='/bin/nogit'

文档:

  • %undo从堆栈中删除最后一个命令
  • %run执行堆栈中的所有命令,并在完成后将其删除
  • __abc0关闭CLI而不执行任何操作
  • ctrl+c具有与执行%run; %exit%run%exit相同的效果
  • 命令历史记录将保存到名为__abc0的文件中,该文件与脚本位于同一文件夹中
  • 您可以使用分号在一行中添加多个命令
  • 您可以使用git关键字,因为如果git关键字已经存在,则脚本不会添加它

演示:

  1. init
  2. add -A
  3. stage -A
  4. status
  5. commit -m "initial commit"
  6. %run; %exit

源代码:

#!/usr/bin/env python
import sys, os, signal, atexit, readline, subprocess


commands, stop, history_file = [], False, os.path.join(os.getcwd(), "nogit.history")


def run_commands():
stop = True
for cmd in commands:
command = ["git" if not cmd.startswith("git ") else ""]
command = [cmd] if command[0] == "" else [command[0], cmd]
subprocess.Popen(command).communicate()
commands = []


def signal_handler(sig, frame):
run_commands()
sys.exit(0)


try:
readline.read_history_file(history_file)
signal.signal(signal.SIGINT, signal_handler)
while True:
if stop == True:
break
command = input("git> ")
if command == "%undo":
commands.pop()
elif command == "%run":
run_commands()
elif command == "%exit":
sys.exit(0)
else:
commands += [cmd.strip() for cmd in command.split(";")]
signal.pause()
readline.set_history_length(-1)
except IOError:
pass


atexit.register(readline.write_history_file, history_file)

用你的编辑器。

从您最喜欢的编辑器(如VS代码)中键入命令,如commit,并使用Git提高效率:

enter image description here

或者键入__abc0以获取所有命令:

enter image description here

对于基本的东西,你可以做:

function ggit(){ while true; do printf 'git> '; read; eval git $REPLY; done }
git> status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)


Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)


deleted:    yarn.lock


no changes added to commit (use "git add" and/or "git commit -a")
git> add .
git> status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
(use "git push" to publish your local commits)


Changes to be committed:
(use "git reset HEAD <file>..." to unstage)


deleted:    yarn.lock


git>

按Ctrl+C退出

当我将Windows 7与Conemu一起使用时,我将以下内容添加到我的开发环境启动脚本中:

doskey g=git $*

这样,我可以只使用__abc0命令,而不用输入__abc1。 上一次我尝试使用Windows 10和Conemu,它不起作用,我认为有一个错误,但值得一试。

使用一个括号编辑器,它很容易使用你的代码和Git命令,它也有许多功能。

enter image description here

右上角的第二个双目图标用于安装扩展。

enter image description here

搜索如上图所示的扩展brackets git并安装它。

enter image description here

再次到右上角,将显示第四个图标,所以只需点击并看到如上图所示的变化。

如果要安装支架,请使用以下命令:

sudo add-apt-repository ppa:webupd8team/brackets
sudo apt-get update
sudo apt-get install brackets

有关详细信息,请阅读:乌本图皮特上的如何在Ubuntu和Linux Mint中安装括号代码编辑器

从今天起:GitHub CLI可用。

GitHub CLI将GitHub带到您的终端。它减少了上下文 切换,帮助您集中精力,并使您能够更轻松地编写脚本和 创建您自己的工作流程。今年早些时候,我们宣布了 GitHub CLI.自从我们发布测试版以来,用户已经创建了 250,000个拉取请求,执行了350,000多次合并,创建了 GitHub CLI的20,000个问题。我们收到了这么多体贴的礼物 反馈,今天GitHub CLI已推出测试版,可用于 在Windows、MacOS和Linux上下载。

以后

while read -erp "*git*${PS1@P}" cmd rest; do
if _=`git help $cmd 2>&-`
then eval git $cmd "$rest"
else eval $cmd "$rest"
fi
done

默认情况下,我们输入的每个命令都被解释为Git命令。

如果它看起来像一个,否则它将被解释为是,所以你可以将git与其他命令混合,如果你想使用一个双关语命令,只需在它前面加上一个反斜杠,__abc0将被评估为__abc1,但__abc2将运行普通的__abc3命令。像往常一样出去结束它。