9
#!/bin/bash
#gedit tidy plugin
init=false
SRC_DIR=~/repos

DIRECTORY="Gedit-Clientside-Plugin"
#making repos directory
if [ ! -d "$SRC_DIR" ]; then mkdir $SRC_DIR; fi



if [ ! -d "$SRC_DIR/$DIRECTORY" ]; then
    init=true
    cd $SRC_DIR && pwd && git clone git://github.com/trentrichardson/Gedit-Clientside-Plugin.git && cd $DIRECTORY
else
    cd $SRC_DIR/$DIRECTORY
fi
#below here is what I'm having trouble with
git pull 1>&1 | grep "Already up-to-date."

if [[ ! $? -eq 0 && ! $init ]]; then
    read -e -p "## Branch moved, build and install Gedit-Clientside-Plugin? [Y/n] " yn
    if [[ $yn == "y" || $yn == "Y" || $yn == "" ]] ; then
        if [ ! -d "/usr/share/gedit/plugins/clientside" ]; then
            sudo cp ~/repos/Gedit-Clientside-Plugin/clientside /usr/share/gedit/plugins/ -r
        else
            echo "Directory already exists."
        fi
    fi
fi

上記のコードは、git リポジトリから Emacs をインストールするために、stackoverflow で見つけたスクリプトから編集したものです。このスクリプトでやりたいことは、git リポジトリからプログラムをインストールし、更新が必要な場合は更新することです。もちろん、それをインストールする手順を提供する必要があります。このスクリプトの場合、clientsideディレクトリを/usr/share/gedit/plugins/ディレクトリにコピーするだけです。

スクリプトをインストールする方法についての助けは必要ありませんが、必要なのは、リポジトリが最新かどうかを確認してそこから移動する方法です。

今、私が理解していないのは、この部分です:

git pull 1>&1 | grep "Already up-to-date."

    if [[ ! $? -eq 0 && ! $init ]]; then
.....
    fi

ターミナルで実行するgit pull 1>&1 | grep "Already up-to-date." && $?と、出力はAlready up-to-date. 0. したがって、これは更新をチェックする部分ですが、次の部分 (if ステートメント) は実行されません。これは、ディレクトリを gedit プラグイン ディレクトリにコピーする部分です。1>$1意味も意味もわかりません$?。したがって、私は問題を解決できませんでした...そして、私が理解していないのは、なぜそれが最新でないと考えるのかです( ifステートメントでBranch is movedwhengit pullが返されないと言っていると仮定しています)。0

それには簡単な解決策があり、答えはbashとgitの両方を教育することになると確信しています。私はすべての助けに感謝します。

ubuntu 12.04 を使用しています。

4

3 に答える 3

15

私はむしろ「git:プルが必要かどうかを確認する」のソリューションを使用したいと思います:

git fetch origin
reslog=$(git log HEAD..origin/master --oneline)
if [[ "${reslog}" != "" ]] ; then
  git merge origin/master # completing the pull
  ...
于 2012-12-06T06:45:18.040 に答える
7

Vonc がすでに気付いているように、この質問は「git: check if pull needed」と重複しています。

そこで、最後にコミットされたバージョンの SHA1 を取得し、それをリモート オリジンの SHA1 と比較する、次の 1 行のスクリプトを提案しました。

[ `git log --pretty=%H ...refs/heads/master^` = `git ls-remote origin
-h refs/heads/master |cut -f1` ] && echo "up to date" || echo "not up to date"
于 2013-03-10T17:52:08.323 に答える
5

クラウディオの答えを編集しなければなりませんでした

[ "`git log --pretty=%H ...refs/heads/master^ | head -n 1`" = "`git ls-remote origin -h refs/heads/master |cut -f1`" ] && echo "up to date" || echo "not up to date"
于 2013-06-04T14:33:34.460 に答える