5

deployMakefileでコマンドを作成しようとしています。このコマンドは、ブランチを上書きしてから、deploymentこのブランチをにプッシュしoriginます。

ただし、作業ツリーが空でない場合、コマンドはエラーメッセージで停止/失敗する必要があります。

次のようなもの:

deploy:

    status=$(git status --porcelain)
    test "x$(status)" = "x"
    git branch -f deployment
    git push origin deployment

残念ながら、このテストとステータス変数は期待どおりに機能していないようです。

これをどのように達成しますか?私は本当に使うことになっていますtestか?

4

1 に答える 1

14

git diff-indexリポジトリが汚れているかどうかを確認するために使用します。

deploy:
        git diff-index --quiet HEAD 
        git branch -f deployment
        git push origin deployment

makefile内のシェル変数をチェックする場合は、変数が設定されているシェルと同じシェル内の変数の値をチェックする必要があります。Makeは各コマンドを個別のシェルで呼び出すため、次のような操作を行う必要があります。

deploy:
        @status=$$(git status --porcelain); \
        if test "x$${status}" = x; then \
            git branch -f deployment; \
            git push origin deployment; \
        else \
            echo Working directory is dirty >&2; \
        fi

二重の「$」、セミコロン、および行の継続に注意してください。

于 2012-05-11T20:01:46.977 に答える