2

Git を使用してコードを管理およびデプロイします。私は運用チームに所属しており、展開を行っています。私たちの開発者は変更を加えてコードを Github にプッシュし、私たち (Ops) は管理されたプロセスを使用して本番コードをプルしてデプロイします。

プロセスは次のようになります。

バックグラウンド

  • 開発者は何かをします。そのようなものは最終的にGithubにあり、開発者はそう言っています.
  • ローカルの「ステージング」クローンと、ローカルの「デプロイ」ベア git リポジトリがあります。ローカルの git クローンには 2 つのリモートがあり、Github が "origin" で、ローカルのベア リポジトリが "deploy" です。
  • 「デプロイ」リモートからプルするシェフのgitリソースを介して実際にコードをデプロイするために、ウェブサーバーでシェフを使用します
  • 「デプロイ」リモートがあるため、開発の仕上げとデプロイのタイミングの間にゲート メカニズムがあります。(Github から直接デプロイするのではなく)

実際の導入プロセス

  1. cd into local clone
  2. git checkout branchname
  3. git pull origin branchname
  4. git push deploy branchname

これらはすべて部分的に自動化されており、完全自動化に移行しています。そのため、ステージング クローンにローカルな変更を加えないように注意しておりgit status、そのクローンの出力は、nothing to commit (working directory clean)

ただし、今週は奇妙なメッセージが表示されました。deploy clone は、オリジンより 80 コミット進んでいることを示しています! とも言いますがnothing to commit

# On branch branchname
# Your branch is ahead of 'origin/branchname' by 80 commits.
#
nothing to commit (working directory clean)

最後に、それ自体は特に問題はありません。コミット SHA256 ハッシュは、このクローンと、すべての Web サーバーにデプロイされたコードで一致します。実際の rsync の比較は行っていませんが、実際のコード自体が正しくデプロイされていることには自信があります。

これがどのように発生する可能性があるのか​​、それが悪い場合、ローカル クローンを削除して最初からやり直す以外にクリーンアップする方法を知りたいです。

4

2 に答える 2

1

deployとリポジトリの両方が同じ ' ' (GitHub)localから複製されている場合、プロセスは. originlocalgit pull origin

リポジトリdeployは から何もフェッチしませんorigin(からのコミットのみを受け取りlocalます)。
つまりdeploy、オリジン(少なくともそれが知っているオリジン)にないコミットがあるとまだ信じています。
リポジトリから簡単git fetch originに実行deployすると、そのステータスがよりクリーンになります。

于 2013-02-12T15:12:09.090 に答える
0

origin/branchname以前のコミットにリセットされた、誰かがanother_repo/branchname誤ってローカル リポジトリをプルしたなど、さまざまな理由が考えられます。ただし、メッセージの実際の意味を誤解しているようです。

次のコミットを想像してください。

A -- B -- C -- D                origin/branchname
      \         \
        E ------ F -- G -- H    branchname

ローカル リポジトリに触れていない場合は、明らかにクリーンであり、nothing to commit (working directory clean)メッセージが表示されます。ただし、branchname実際にはorigin/branchname3 コミット分進んでいます。これは単に、現在のブランチに の先頭の後に 3 つのコミットがあることを意味しますorigin/branchname。もちろん、コミットするものはまだありません!(押すものはありますが、この2つは異なります)

これは、これがどのように発生したかを示すシナリオの 1 つです。

                  E -- F        origin/otherbranch
                /       \
A -- B -- C -- D         \      origin/branchname
                \         \
                 --------- G    branchname

あなたが(たとえば、誤って)言った場合:

git checkout branchname
git pull origin otherbranch

branchname次に、 の前に2 つのコミットがありorigin/branchnameます。

繰り返しになりますが、正確に何が起こったのかを知るには、さらに分析が必要です。git log --pretty=oneline --graph問題を見つけるのに役立つかもしれません。これが完了したら、適切な以前の状態に戻すことを試みることができます。

于 2013-02-12T15:20:16.987 に答える