繁体   English   中英

git命令“ git checkout master || :”

[英]git command “git checkout master || :”

我试图理解这个git命令。 我有一个软件存储库,其中包含子模块,并且该子模块指向另一个子模块。 为了签出,使用此命令-

git submodule foreach --recursive 'git checkout master || :' 

这个问题是关于理解该命令的。 “ ||:”在此命令中是什么意思? 我在问这个问题,以便我可以根据需要更灵活地更改这些命令。

在此命令-foreach中,意味着对找到的每个子模块进行检查,然后对master进行检出,但这里的“ ||和:”是什么。

git submodule foreach --recursive '<command>'

这将在每个检出的子模块中运行<command>

这样,命令本身就可以理解:

git checkout master || :

git checkout master应该很清楚。

|| 是OR控制字符。 对于command1 || command2 command1 || command2command2如果执行command1返回一个非零退出状态。 所以基本上当command1失败时。

因此,在这种情况下, :git checkout master失败时运行。

另一方面,冒号是Bash中 true的别名。 如此有效地执行此命令将不会执行任何操作,从而使完整命令可以运行git checkout master 否则它将以静默方式失败。

:是一个不执行任何操作且总是成功的shell命令(类似于true )。 因此,通过添加
|| : || :到命令行,即使||左侧的命令,总体命令也总是成功的。 失败了 在这种情况下,即使其中一个子模块无法检出master它也会导致git submodule foreach继续。

git文档建议使用此用法:

任何子模块中命令的非零返回都会导致处理终止。 可以通过添加|| :来覆盖 || :到命令末尾。

cmd ||:只是确保命令始终成功的一种方法。 如果cmd失败,则:被执行并成功,因此$? 将始终为0。因此,基本上,您的foreach子模块将忽略检出master的任何错误。

git submodule文档中获取foreach ...

任何子模块中命令的非零返回都会导致处理终止。 可以通过添加||来覆盖 :到命令末尾。

它说即使命令之一失败,也要继续处理子模块。

如果您熟悉make ,则类似于-放在命令的前面,然后make将忽略该命令的任何错误

command_a || command_b command_a || command_b导致bash的执行只有command_a 没有成功执行(command_a返回退出代码不同势为0)command_b。 :true的替代表示法,等于退出代码0

所以git checkout master || : git checkout master || :即使git checkout master失败,也将始终返回true。

如果对子模块之一的检出不成功, git submodule foreach --recursive 'git checkout master'编写git submodule foreach --recursive 'git checkout master'会中断。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM