[英]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 || command2
, command2
如果执行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.