bash脚本中的条件和git

时间:2016-04-13 16:11:15

标签: bash

我使用一个小的bash脚本来更新我的git文件夹(我克隆了一些项目)。我想为这个脚本添加一些条件。  我想补充一下:

  

如果[本地分支已更新]

     

然后[运行一些]

问题是我不知道如何让bash了解本地分支何时更新以及何时更新

1 个答案:

答案 0 :(得分:0)

我看到两个解决方案

两者都基于相同的命令来获得repo状态,但是以不同的方式进行测试。

第一种解决方案

首先执行git remote update > /dev/null以便在git中加载遥控器的状态。

然后将远程状态保存在变量中:

git_remote_state=$(git status -uno | grep <state wanted> | wc -l)

在这里,git status -uno会为您提供有关遥控器的一些信息。

grep <state wanted>将解析并找到您想要的信息,即远程状态:将<state wanted>替换为'branch is ahead''branch is up-to-date''branch is behind'你想要的状态。

wc -l部分是为了得到行数,所以如果你测试分支是否落后,但事实上并非如此,grep将不输出任何内容,wc将计算0行。如果它落后,那么grep将输出一些内容(一行),wc将计算一行。

这样你就可以测试该值,它将是0或1:

if git_remote_state; then
    # git pull...
    # stuff...
fi

第二种解决方案

您仍然执行git remote update > /dev/null,但是您以不同的方式解析状态:

get_remote_state=$(git status -uno | grep -oP 'Your branch is \K([\w-]+)')

在这里,我们使用perl regexp来查找带有子组的分支状态(如果需要更多,请参阅此response),因此git_remote_state可以有三个值:{{ 1}},behindup-to-date

然后我们只用case语句测试这个值:

ahead

我认为两者都有其优点和缺点。

希望它有所帮助!