2017-11-16 16 views
1

ソースgitリポジトリーでは、継続的な統合ビルド・プロセスが指し示されています。プロセスが実行されると、CIプロセスはその出力をリリース・リポジトリにプッシュします。私の質問は次のようなシナリオを中心に展開しています。Gitリモートへのハード・プッシュ後にローカル・リポジトリーをリセットします

  1. 私たちのCIサーバーはソースからビルドし、その結果をリリースリポジトリにプッシュします。
  2. 開発者はリリースリポジトリをチェックアウトし、(CIプロセスでは追加されていない)スキーマ変更スクリプトを追加して、前のコミットを修正し、強制的にプッシュ操作を実行しますスクリプトを追加するだけです)。
  3. 次回CIプロセスが実行され、出力をプッシュしようとすると、「現在のブランチの先端がリモートの相手の背後にあるため、更新が拒否されました」というエラーが表示されます。

私がしたいのは、ローカルリポジトリとリモートリポジトリが正確に一致するようにCIサーバに指示することです。私はいくつかの同様の問題を見てきた、そして、彼らはすべて次のコマンド(または非常に似ている)を実行すると言う。

  • git reset --hard [remote repository]
  • git fetch --all
    1. でも、ビルドプロセスの前にこれらのコマンドを実行した後、私はまだ同じエラーを取得します。私が何をすべきかについてのアイデアは何ですか?あるいは、私がやりたいことが可能であれば。

    +0

    'git fetch'のあとに' git reset -hard origin/branch'を実行してみてください。それはうまくいくはずです。 – Whymarrh

    +0

    fetch + resetが機能しない場合、そのエラーは誤解を招き、修正方法を知りたいと思っている情報の詳細が必要になります – Whymarrh

    +0

    どうしても間違ったリセットをしたに違いないと思われます。答えは、あなたは正しかった、上記は動作しました –

    答えて

    2

    私は間違ったリポジトリをリセットする可能性があると思われます。私は、このように(手動で枝を指定する必要がなくなり、

    git fetch --all 
    git reset --hard @{u} 
    git pull 
    

    @{u}が現在チェックアウトされているものは何でもブランチリセットするためにgitを伝えます(最後のステップは、潜在的に不要である)以下を実行するコマンドを変更したI間違っていたに違いない)。

    1つの追加項目です。パワーシェルスクリプトでコマンドを実行している場合(CIサーバがこれらのアクションをどのように実行するか)、以下のようにgit resetを記述する必要があります(中括弧が解析エラーを引き起こすため)。

    git reset --hard "@{u}" 
    
    関連する問題