Ste*_*lla 170 git alias sh git-alias
我正在尝试创建一个使用多个Git命令和位置参数的别名.每个都有Stackoverflow页面,两者都显得非常明显,但我遇到了麻烦.
例如,我想切换到分支foo并执行状态.所以在我看来.gitconfig
,我有:
[alias]
chs = !sh -c 'git checkout $0 && git status'
Run Code Online (Sandbox Code Playgroud)
这不起作用.而这样的事情会起作用.
chs = !sh -c 'git checkout $0'
echoes = !sh -c 'echo hi && echo bye'
Run Code Online (Sandbox Code Playgroud)
任何见解将不胜感激.
Oli*_*ier 146
这将工作(使用zsh和bash测试):
[alias] chs = !git checkout $1 && git status
Run Code Online (Sandbox Code Playgroud)
Lil*_*ard 70
您可以定义shell函数.
[alias] chs = "!f(){ git checkout \"$1\" && git status; };f"
Run Code Online (Sandbox Code Playgroud)
Rei*_*l-- 63
这针对Windows批处理/ msysgit bash; 可能不适用于其他环境.
正如Olivier Verdier和Kevin Ballard所说的那样
[alias] chs = !git checkout $1 && git status
几乎可以工作,但是给出了一个虚假的额外插入的论点......
git chs demo -> git checkout demo && git status demo
但是如果添加&& :
到别名的末尾,那么伪参数将被消耗到位置标记中.
所以
[alias] chs = !git checkout $1 && git status && :
Run Code Online (Sandbox Code Playgroud)
给出正确的输出......
git chs demo -> git checkout demo && git status
Vit*_*lyB 23
我能够创建多行和非常复杂的git别名.它们在Windows上工作正常,但我认为它们也在其他地方工作,例如:
safereset = "!f() { \
trap 'echo ERROR: Operation failed; return' ERR; \
echo Making sure there are no changes...; \
last_status=$(git status --porcelain);\
if [[ $last_status != \"\" ]]; then\
echo There are dirty files:;\
echo \"$last_status\";\
echo;\
echo -n \"Enter Y if you would like to DISCARD these changes or W to commit them as WIP: \";\
read dirty_operation;\
if [ \"$dirty_operation\" == \"Y\" ]; then \
echo Resetting...;\
git reset --hard;\
elif [ \"$dirty_operation\" == \"W\" ]; then\
echo Comitting WIP...;\
git commit -a --message='WIP' > /dev/null && echo WIP Comitted;\
else\
echo Operation cancelled;\
exit 1;\
fi;\
fi;\
}; \
f"
Run Code Online (Sandbox Code Playgroud)
我写了一篇文章,并在这里有更多的例子.
Fra*_*ace 21
[alias]
chs = !git branch && git status
Run Code Online (Sandbox Code Playgroud)
Eng*_*hly 13
[alias]
chs = !git checkout && git status
ac = !git add . && git commit -m
Run Code Online (Sandbox Code Playgroud)
什么是 !?
如果别名扩展以感叹号为前缀,它将被视为 shell 命令。git config 别名中的感叹号是什么意思?
从 .gitconfig 文件调用别名
git chs
git ac "write_your_commit_message"
Run Code Online (Sandbox Code Playgroud)
试试这个:
[alias]
chs = "!sh -c 'git checkout \"$0\" && git status'"
Run Code Online (Sandbox Code Playgroud)
像这样称呼它: git chs master
小智 5
可以通过\
在每行末尾附加多行git别名。
[alias]
chs = "!git checkout $1 \
; git status \
"
Run Code Online (Sandbox Code Playgroud)
这里的问题是位置参数似乎被发送到 shell 命令两次(从 git 1.9.2 开始)。要明白我的意思,请尝试以下操作:
[alias]
test = !git echo $*
Run Code Online (Sandbox Code Playgroud)
然后做git test this is my testing string
。您应该观察以下输出(为了清楚起见,在此处编辑了最后两行):
03:41:24 (release) ~/Projects/iOS$ git test this is my testing string
this is my testing string this is my testing string
^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
#1 #2
Run Code Online (Sandbox Code Playgroud)
解决这个问题的一种方法是
[alias]
chs = !git checkout $1 && git status && git echo x >/dev/null
Run Code Online (Sandbox Code Playgroud)
这将消耗额外的位置参数,因为它应用于最后一个回显命令,并且对结果没有影响。
归档时间: |
|
查看次数: |
58769 次 |
最近记录: |