web-dev-qa-db-ja.com

シェルスクリプトを介して、gitリポジトリのマスターブランチがオリジンの背後にあるかどうかを確認します

私は現在、ローカルマスターブランチがOrigin/masterの背後にあることが判明したときに、gitリポジトリをリベースするように通知するbashスクリプトを作成しています。

これまでのところ、次のことを考え出しましたが、$?は常に1を返します(これは、空の差分でもlessが読み込まれるためだと思います。

#!/bin/bash

REPO_PATH=$1
cd $REPO_PATH

# flow once inside repo
{
  git fetch
  git diff master Origin/master
} &> /dev/null

if [ "" = $? ]
then
  echo "Empty"
  # logic to follow
else
  {
  git pull
  } &> /dev/null
  echo "Don't forget to rebase!!!"
  echo $REPO_PATH
fi

# check for changes to master
# If master is behind Origin/master
# then pull master and notify me to rebase

# run this at the start of the day (this script should be run from my start_work
# script and should also be periodically run throughout the day. [maybe every
# time I'm about to run coverage/push?])

誰かアイデアはありますか?

1
David Kiarie

git-merge-base--is-ancestorテスト:

if git merge-base --is-ancestor Origin/master master; then
    echo Empty
else
    echo "Don't forget to rebase!"
fi
2
Stephen Kitt

終了ステータスを確認する代わりに、実際の出力を確認できます。

例えば

git fetch &> /dev/null
diffs=$(git diff master Origin/master)

if [ -z "$diffs" ]
then
  echo "Empty"
2
Stephen Harris