将参数传递给git alias不起作用
我在Windows 10上创建了以下别名以发出将参数传递给git alias不起作用,git,git-alias,Git,Git Alias,我在Windows 10上创建了以下别名以发出commit-am命令。我使用$1标记来注册参数,但它不起作用 git config--global alias.cam'commit-am$1' 发出以下命令将返回以下错误消息: git-cam“测试提交” 错误消息: fatal:path'test commit…'和-a没有意义 我该怎么做?我研究了如何在git别名中使用参数,但没有一个参考资料提供了一个简单的解决方案。谢谢。这是Git初学者的规则:不要使用Git commit-a 这是高级Gi
commit-am
命令。我使用$1
标记来注册参数,但它不起作用
git config--global alias.cam'commit-am$1'
发出以下命令将返回以下错误消息:
git-cam“测试提交”
错误消息:
fatal:path'test commit…'和-a没有意义
我该怎么做?我研究了如何在git别名中使用参数,但没有一个参考资料提供了一个简单的解决方案。谢谢。这是Git初学者的规则:不要使用
Git commit-a
这是高级Git用户的规则:不要使用Git提交-a
,除非:
- 在
之前运行git commit
,然后git add-u
- 您知道,存储库没有使用写得不好的预提交脚本,该脚本在出现
时会出现错误行为git commit-a
@这是可行的,但现在当我发出git-cam“test-commit”时,它只显示未跟踪的文件。没有安排或实施任何活动。如果我分别发出add和commit命令,它可以正常工作。为什么呢 这里的问题是
git commit-a
不像git add
后面跟着git commit
。它更像是git add-u
,后跟git commit
(但即使如此,仍然不完全相同)。具体来说,git add-u
只会更新git已经知道的文件。-u
中的u
代表更新,即不添加任何未跟踪的文件,但根据需要更新所有跟踪的文件
您有一个要添加的未跟踪文件。必须在不使用
-u
选项的情况下使用git add
。(从技术上讲,还有其他几个命令可以帮助您实现这一点,但要使用的是git add)。一个解决方案是将别名git命令传递给shell命令。这样,$1
参数将不会再次追加到命令末尾,从而使命令成功
git config--global alias.cam'!sh-c“git提交-am$1”
或者干脆省去$1
参数标记:
git config--global alias.cam'!git提交-am'
但是,请记住,commit-a
仅适用于需要进行修改的跟踪文件。因此,更好的方法是:
git config--global alias.cam'!吉特增补,git commit-m'
只是commit-am
。它将您提供的参数放在重写命令的末尾。@jthill可以工作,但现在当我发出git-cam“test-commit”
时,它只显示未跟踪的文件。没有安排或实施任何活动。如果我分别发出add和commit命令,它可以正常工作。为什么?谢谢你的反馈。我刚刚使用了以下别名,它可以正常工作:git config--global alias.cam'!吉特增补,git commit-m'
。而且命令gitcam“testcommit”现在起作用了。为什么下面的别名不起作用<代码>git配置--global alias.rma'!git config--全局--取消设置别名。$1'。发出git-rma-cam
不会删除cam
别名,但这样做是有效的:git-config--global--unset-alias.cam
。使用$1
变量,您实际上正在运行git-config--global--unset-alias.cam
。(在shell命令前面使用GIT_TRACE=1
,让GIT向您展示它在做什么。)接下来,检查。练习:根据文档,--unset name.of.option value_regex
做什么?正则表达式<代码> CAM 匹配?在练习之后,考虑下面的一般规则。要使Git shell别名正常工作,请使用以下模板将其编写为shell函数:alias=!f(){command1;command2“$1”;shift;command3“$@”};f
。另一个练习(相当难,除非你做了一些shell编程):这里发生了什么?(如果您还没有用sh/bash编写程序,那么还有很多阅读工作要做!)我做了以下工作,现在可以正常工作了。再次感谢您的反馈<代码>git配置--global alias.rma'!sh-c“git config--global--unset别名$1”'