2

ビルド エンジニアとシステム担当者の役割を担うことになったので、いくつかのことを学ばなければなりませんでした。つまり、インフラストラクチャをセットアップする方法です。私が乗船する前は、何も持っていませんでした。これを念頭に置いて、私が明白であるべきことを尋ねたら、すみません。

現在、3 つのレベルの分散 mercurial リポジトリがあります。レベル 1 は各開発者マシンに、レベル 2 は中央 (トランク) サーバーにあり、ローカル ネットワークからのみアクセスでき、3 番目のレイヤーは BitBucket にあります。ワークフローは次のとおりです。

  1. ローカル開発: 開発者は、ローカル ネットワーク サーバーから変更セットをプルします。開発者はローカルにコミットし、マージの競合が解決されるとローカル サーバーにプッシュします。スケジュールされたスクリプトは、夜間にすべてを BitBucket にバックアップします。

  2. 在宅勤務: 開発者は BitBucket から変更セットをプルします。開発者はローカル リポジトリにコミットし、BitBucket にプッシュします。

  3. TeamCity は、プロジェクトごとにローカル ネットワーク サーバーからリポジトリの変更を取得し、テスト環境へのビルド / 自動デプロイを実行します。

私が直面している問題はシナリオ 2 です。現時点では、誰かが何かを bitbucket にプッシュした場合、オフィスに戻ったときにそれをマージする責任があります。また、自動化できれば、少し時間の無駄になります。

ご参考までに、ローカル ネットワーク上に中央リポジトリがある理由は、BitBucket リポジトリの TeamCity ビルドを実行するのが遅いためです。検証していないので、ただの推測です。

とにかく、スケジュールされ、ローカルネットワーク上の中央リポジトリからすべての変更をプッシュするスクリプトは、リポジトリごとに「hg push」を実行するだけです。事前にプル/マージを行う必要があります。どうすればこれを正しく行うことができますか?

これは、プルでスイッチを使用する必要があるものです: - プル後に更新 - マージの競合が発生した場合は、常に新しいファイルを取得します - エラーが発生した場合は、システム管理者に電子メールを送信します - 追加の何か?

説明されているものと大きく異ならない限り、独自の設定を自由に共有してください。

更新:最近の回答に照らして、意図したアプローチを明確にする必要がある場合、重要な側面を感じています。アイデアは、ローカル ネットワークの中央リポジトリでマージを強制することではありません。代わりに、post pull: update + merge を使用して、開発者のマシンで HgWorkbench を使用するのと同じように、マージの競合を解決する必要があります。すべての開発者はデフォルトでこれをオンにしているので、問題ありません。

したがって、サーバー上のスクリプト/バッチ ファイルは次のようになります。

  1. BitBucket からプル
  2. 更新 + 自動マージ
  3. マージの自動競合はありますか?

    3.1 はい -> 管理者にメールを送信して手動でマージ -> 中断

    3.2 いいえ -> 続行

  4. 送信変更セットを取得します。プッシュすると複数のヘッドが作成されますか? (これはプル/更新のため冗長である可能性があります)

    4.1 はい -> 管理者にプロンプ​​トを表示します。壊す。

    4.2 いいえ -> プッシュの変更

これで問題が少し解決することを願っています。さて、これは hg コマンドのみを使用して実行できますか (バッチ)、それともスクリプトを作成する必要がありますか? 具体的には、メールを送信できますか?

ありがとう。

4

3 に答える 3

3

つまり、すべての作業はBitBucketで利用できますよね?BitBucket(どこからでも利用可能)をプライマリリポジトリソースにし、ローカルサーバーを削除してみませんか?ナイトリービルド用にTeamCityを使用してBitBucketから変更をプルできます。開発者は、常にBitBucketの現在のリポジトリで作業し、すべてのマージの問題を自分で解決するため、その後のマージは発生しません。

于 2012-06-06T08:55:48.153 に答える
2

変更が競合している場合、変更を自動的にマージしようとはしません。これは、壊れた一貫性のないバージョンと、混乱と混乱を引き起こす「失われた」変更につながるだけです。マージがどのように見えるかが明確でない場合は、自動的にマージしないでください。

より良い代替手段は、2 つの頭を保持し、マージせずに押したり引いたりすることです。このようにして、誰もが職場や自宅から作業していたバージョンのデータを取得できます。手動でマージを行う必要がありますが、これは職場や自宅から行うこともできるため、開発者はどこにいても問題を解決できます。このシナリオで電子メールを送信して、全員が問題を認識していることを確認することもできます.

于 2012-06-06T08:57:55.233 に答える
1

スクリプトを使用してこれを自動化できると思います。私があなたなら、PowerShell を試してみます。ただし、競合が発生した場合は手動で変更をマージする必要がある場合があります (開発者が BB とローカル リポジトリの両方に変更をコミットすると、これらの変更が競合する可能性があるため)。

于 2012-06-06T08:34:43.880 に答える