我如何避免键入“;吉特;在每个Git命令的开头?
我想知道是否有办法避免在每个git命令的开头键入单词我如何避免键入“;吉特;在每个Git命令的开头?,git,version-control,command-line-interface,git-bash,Git,Version Control,Command Line Interface,Git Bash,我想知道是否有办法避免在每个git命令的开头键入单词git 如果在打开命令提示符进入“git模式”后,有一种方法在开始时只使用一次git命令,那就太好了 例如: git> 在这之后,我们键入的每个命令默认解释为Git命令 与我们使用MySQL shell编写数据库命令的方式类似: mysql> sudo cp ./git /bin/nogit sudo chmod +x /bin/nogit alias nogit='/bin/nogit' sudo add-apt-repos
git
如果在打开命令提示符进入“git模式”后,有一种方法在开始时只使用一次git
命令,那就太好了
例如:
git>
在这之后,我们键入的每个命令默认解释为Git命令
与我们使用MySQL shell编写数据库命令的方式类似:
mysql>
sudo cp ./git /bin/nogit
sudo chmod +x /bin/nogit
alias nogit='/bin/nogit'
sudo add-apt-repository ppa:webupd8team/brackets
sudo apt-get update
sudo apt-get install brackets
这样我就不用一天打几百次git
注意:我在Windows上使用。这不是您想要的,但是您可以在
~/.bashrc
中为您最常用的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中运行,避免反复键入git:
- -一个定制的bashshell,带有Git提示符、别名和补全
- -一个用Perl编写的简单Git shell
- -将任何带有子命令的程序包装在REPL中
注意:我自己没有使用过它。一个Perl one liner,它将完成以下操作:
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;
}
#包括
#包括
int main(int argc,char*argv[]){
while(true){
std::cout我非常喜欢在我的GitBash的~/.bash_配置文件中使用别名。如果你采用这种方法,下面是我的一些最爱:
# 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提交——修改
:am
git pull
:pu
git-rebase-rebase合并-i-到origin/development-origin/development-feature/blue header
:blu
git-rebase——中止
:ab
git-rebase——继续
:con
docker compose stop&&git pull&&make&&docker compose up-d
:up
- 等
此外,Ctrl-R不仅适用于bash,还适用于许多使用readline库的程序(有很多),如Python shell、IPython、mysql shell、psql shell、irb(ruby)等。我的一个朋友制作了一个小bash脚本来实现这一点。它被称为
我知道这是一个很晚才回答的问题,但这个问题确实给我留下了深刻的印象,因为我已经处理了相当长一段时间这种重复的痛苦
我不确定您的情况,但老实说,我不想为每个git
命令创建别名,因此我编写了一个名为的python脚本来解决这个问题:
#!/usr/bin/env python
import sys, os, signal, atexit, readline, subprocess
commands, stop, history_file = [], False, os.path.join(os.getcwd(), "git.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)
是一个简单的python脚本,用于防止不必要地重复“git”关键字
文档:
%undo
命令从堆栈中删除最后一个命令
%run
命令运行堆栈中的命令并清除堆栈
%exit
命令将关闭CLI,而不执行任何操作
- 按
ctr+c
与运行%run;%exit
- 脚本将执行的命令保存到与脚本相同的文件夹中名为
git.history
的文件中
- 可以使用分号在一行中添加多个命令
- 您可以在命令开头使用关键字
git
,脚本不会复制它(例如:git init
不会变成git git init
)
命令示例:
init
添加。
stage.
commit-m“初始提交”
%run;%exit
其他信息(适用于Linux用户):
如果需要,可以删除扩展名.py
,并使用以下命令将其转换为可执行文件:
mv ./git.py ./git
chmod +x ./git
然后,不要像这样调用脚本:
python3 git.py
您应该运行以下命令:
./git
其他信息(针对懒惰的人):
如果您很懒,不想键入/
,则可以将此脚本移动到/bin/
文件夹中,并为其创建别名
sudo cp ./git /bin/nogit
sudo chmod +x /bin/nogit
alias nogit='/bin/nogit'
sudo cp ./git /bin/nogit && sudo chmod +x /bin/nogit && alias nogit='/bin/nogit'
sudo cp ./git /bin/nogit;sudo chmod +x /bin/nogit;alias nogit='/bin/nogit'
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>
doskey g=git $*
sudo add-apt-repository ppa:webupd8team/brackets
sudo apt-get update
sudo apt-get install brackets
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