我正在尝试理解这个git命令。我有一个包含子模块的软件存储库,该子模块指向另一个子模块。为了检出,使用此命令-
git submodule foreach --recursive 'git checkout master || :' 这个问题是关于理解这个命令的。此命令中的"|| :“是什么意思?我提出这个问题是为了更灵活地根据需要更改这些命令。
在这个命令- foreach中,对于找到的每个子模块,执行master的签出,但这里的"|| and :“是什么意思。
发布于 2017-12-06 06:47:38
git submodule foreach --recursive '<command>'这将运行<command> in each checked out submodule。
所以这就让命令本身去理解:
git checkout master || :git checkout master应该很清楚。
||是OR控制字符。对于command1 || command2,如果command1返回非零退出状态,则执行command2。所以基本上当command1失败的时候。
因此,在本例中,:会在git checkout master失败时运行。
另一方面,冒号是true in Bash的别名。因此,实际上,此命令不会做任何事情,如果可以,它将使完整命令运行git checkout master,否则它将静默失败。
发布于 2017-12-06 06:47:06
:是一个什么也不做却总是成功的外壳命令(类似于true)。因此,通过添加
|| :到命令行,则即使||左侧的命令失败,整个命令也将始终成功。在这种情况下,即使其中一个子模块不能签出master,它也会导致git submodule foreach继续。
git文档建议使用以下用法:
任意子模块中的命令返回非零将导致处理终止。这可以通过在命令末尾添加
|| :来覆盖。
发布于 2017-12-06 06:46:05
cmd ||:只是确保命令始终成功的一种方法。如果cmd失败,则执行:并成功,因此$?将始终为0。所以基本上你的子模块foreach会忽略所有错误,检查出master。
https://stackoverflow.com/questions/47663832
复制相似问题