継続的インテグレーションにはTeamCityを使用し、ソース管理にはGitを使用します。一般的に、それはかなりうまく機能します-便利で、現代的で、テストが失敗したときの迅速なフィードバックを私たちに提供します。
Gitマージの詳細に関連する奇妙な動作があります。ケースの手順は次のとおりです。
- 最初の開発者はマスターリポジトリからプルします。
- 2番目の開発者はマスターリポジトリからプルします。
- 最初の開発者はローカルでコミットAを作成します。
- 2番目の開発者はコミットBをローカルで作成します。
- 2番目の開発者はコミットBをプッシュします。
- 最初の開発者はコミットAをプッシュしたいのですが、最初にコミットBをプルする必要があるためできません。
- 最初の開発者はリモートリポジトリからプルします。
- 最初の開発者はコミットAをプッシュし、マージブランチコミットを生成します。
マスターリポジトリでのコミットの履歴は次のとおりです。
- B2番目の開発者
- 最初の開発者
- ブランチの最初の開発者をマージします。
ここで、SecondDeveloperがコミットBで失敗したテストを修正したと仮定します。
TeamCityが行うことは次のとおりです。
- コミットBが到着-TeamCityは、すべてのテストに合格してビルド#1を作成します
コミットAが到着-TeamCityはビルド#2(コミットBなし)のテストバーを赤にします!
TeamCityは、保留中の「Merge Branch」コミットには変更(新しいファイル)は含まれていないと考えていましたが、実際にはコミットBのマージが含まれているため、TeamCityはここで新しいビルドを作成してテストをグリーンにしたくありません。
ここに2つの問題があります:1。この場合、2番目のコミット(コミットA)に戻るテストに失敗しました。2。TeamCityは、新しいビルドを作成してテストをグリーンに戻したくありません。
誰かがこの問題の両方を修正する方法を知っていますか?
私はいくつかの合理的な一般的なアプローチを検討します。