我使用一个小的bash脚本来更新我的git文件夹(我克隆了一些项目)。我想为这个脚本添加一些条件。 我想补充一下:
如果[本地分支已更新]
然后[运行一些]
问题是我不知道如何让bash了解本地分支何时更新以及何时更新
答案 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}},behind
,up-to-date
。
然后我们只用case语句测试这个值:
ahead
我认为两者都有其优点和缺点。
希望它有所帮助!