git命令" git checkout master || :"

时间:2017-12-05 22:40:19

标签: git

我正在尝试理解这个git命令。 我有一个软件存储库,它有子模块,子模块指向另一个子模块。为了结账,使用了这个命令 -

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

这个问题是关于理解这个命令。 什么" || :"意味着在这个命令?我问这个问题,以便我可以根据需要更灵活地更改这些命令。

在这个命令中 - foreach,找到每个子模块的意思去做并检查主人但是" ||并且:"在这里意味着。

5 个答案:

答案 0 :(得分:3)

git submodule foreach --recursive '<command>'

这会运行<command> in each checked out submodule

这样就让命令本身理解:

git checkout master || :

git checkout master应该很清楚。

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

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

另一方面,冒号是true in Bash的别名。如此有效,此命令将不会执行任何操作,使完整命令运行git checkout master ,如果它可以或它将无声地失败。

答案 1 :(得分:1)

:是一个shell命令,它什么也不做,总是成功(类似于true)。所以加入
|| :到命令行,即使||左侧的命令失败,整个命令也会一直成功。在这种情况下,即使其中一个子模块无法结帐git submodule foreach,也会导致master继续。

这种用法由git文档建议:

  

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

答案 2 :(得分:0)

cmd ||:只是确保命令始终成功的一种方法。如果cmd失败,那么:将被执行并成功,因此$?将始终为0.所以基本上你的submodule foreach忽略了检出master的任何错误。

答案 3 :(得分:0)

来自git submodule docs for foreach ...

  

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

它表示即使命令在其中一个上失败,也要继续处理子模块。

如果您熟悉make,则与putting a - at the front of a command then make will then ignore any errors from that command类似。

答案 4 :(得分:0)

只有当command_a 成功执行时,

command_a || command_b才会使bash执行command_b(command_a会将退出代码不同的返回0)。 :true的替代符号,等于退出代码0

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

如果其中一个子模块的结帐不成功,那么写git submodule foreach --recursive 'git checkout master'就会中断。

相关问题