我正在阅读一个旧的部署脚本,我遇到了一系列困扰我的bash。
声明如下。
if [[ \\$(git log @{u}.. 2> /dev/null | tail -n1) != '' ]];
then echo 'LOCAL BRANCH HAS UNCOMMITTED CHANGES.';
fi;
据我所知,我们正在运行一个git日志并检查输出是否为空字符串。我可能非常离开,但这就是我要问的原因。
git log @{u}.. 2> /dev/null | tail -n1
以上是令人困惑的部分。如果我在本地仓库上运行它,我会得到一个空字符串作为返回值。我不明白为什么。我不明白@{u}.. 2> /dev/null
的含义。根据我的理解,2> /dev/null
将可能的错误重定向到位于/dev/null
的文件。但是这条线的其余部分在做什么呢?即@{u}
答案 0 :(得分:1)
正如您提到/dev/null
将stderr(由POSIX定义为文件描述符2)重定向到@{u}
,这是忽略错误消息的常用技巧。
git log @{u}..
是上游分支的快捷方式,请参阅ECMAScript specifications。
git log @{u}..HEAD
与HEAD
相同。双点指定一系列提交,例如@{u}
中的所有提交减去HEAD
中的所有提交。
所以<BorderPane xmlns:fx="http://javafx.com/fxml">
<left>
<StackPane> ... </StackPane>
</left>
<right>
<StackPane> ... </StackPane>
</right>
<top>
<VBox>
<ToolBar> ... </ToolBar>
<MenuBar> ... </MenuBar>
<VBox>
</top>
</BorderPane>
(本地分支)减去上游分支将为您提供尚未推送的本地提交。