2016-05-13 18 views
1

私はgit pullを使ってローカルリポジトリが最新であることを確認しています。ただし、git pullが失敗することがあります。コミットされていない変更がある場合はgit pullが失敗します。コマンドが失敗してもスクリプトの残りの部分が確実に続行されるようにするには、gitまたはshellオプションがありますか?Rescue git pull

スクリプトは現在、次のとおりです。

if [ -d "some-repo" ]; then 
    cd "some-repo" 
    git pull 
    #RESCUE???? 
else 
    git clone [email protected]:USERNAME/some-repo.git 
    cd "some-repo" 
fi 

私はブランチをチェックアウトしたくない、と私は本当に仕事が別の支店で起こっている気にしないでください。 git reset --hardを実行するか、--forceコマンドを使用することは可能ですが、安全であることを確認して、そのコードが失われないようにしたいと思います。

+1

あなたのスクリプトには難しいことがあります: 'git pull'は実際には' git fetch'の後に新しく更新されたローカルブランチの追跡ブランチの 'git merge'です。フェッチが失敗する可能性はありますが、マージが失敗する可能性もあります。だから私はあなたが失敗のタイプを説明する必要があると思います。 –

+3

'git pull'の前に予防的な 'git stash'を実行し、' git stash pop'を実行することができます。しかし、あなたは 'git stash pop 'でも矛盾が現れるかもしれないことを覚えておいてください。 – cfz42

+1

@ cfz42私はこの考えが好きです。競合がある場合、ポップは実際に隠しをポップしないので、変更は安全です。 – Ian2thedv

答えて

1

あなたのgit pullif内部の句を書くことができます。

if git pull; then 
    # Here, git has successfully pulled 
else 
    # Here goes code for dealing with a failed pull 
fi 
+0

'set -e'は、OPが要求したものと逆です – Vampire

+0

あなたは正しいです。私はそれを含めてはならない。 – fonini

+0

'do'を' then'に変更し、 'done'を' fi'に変更してシェルで動作させました。私はそれがgit pullの終了を無効にする、クールなシェルベースの方法だと思います。 git pullは、うまくいけばtrue、そうでなければfalseを返す必要があります。私はまだ失敗した引っ越しに対処する必要があります。 –

0

私はあなたがレポを引く前に、あなただけのこれらの2行を追加することができると思います。

git add . git commit -am "sync repo"

これは限り何のマージ競合がないように動作するはずです。

+0

私は本当に "同期レポ"のメッセージでgitの履歴を埋めるしたくないです。変更を追跡するのが一層難しくなります。私はレポに持っているランダムなものは何でもコミットしなければならないとは思わない。私は、「分離した分離されたものを加える」のように、私がコミットすることについてもっと意図的にしようとする。 –

0

私はgit fetchが良いと思います。 git pullリモートトラッキングブランチを現在のHEADに常にマージします。あなたがチェックアウトしたブランチの履歴を他の人と協力していると少し混乱させるかもしれない、早送りではないマージである可能性があります。 git fetchリモートトラッキングブランチを更新するだけで、新しいコミットをどのように処理するか、それらをすべてマージするか、チェリーピッカーをマスターブランチに選択する方法を決定できます。