3

メンテナンスを減らすためにコードを共有する必要があるいくつかの異なるアプリケーションがあります。私はstackoverflowとWeb全般について多くのことを読もうとしましたが、これはかなり一般的な問題です。私は好きな答えを見つけていません。

私たちの TFS 分岐構造はこのようなものです。開発、メイン、プロダクションの 3 つのブランチがあります。開発ブランチでは、すべてのアクティブな開発が行われ、新しい機能の開発が完了したら、それをメインにマージしてから本番に移行します。production ブランチは、常にサーバー上で実行されるコードです。次の反復の前に修正する必要があるバグを検出した場合。変更はメインで行われ、デプロイ時にプロダクションにマージされます。コードを共有する必要があるアプリケーションは、共通の分岐階層や共通の反復スケジュールを共有していません。実際、アプリケーションの 1 つは、1 か月の反復を年に 1 回しか実行しません。(これは従来の方法とは少し異なることは承知しています。

調査中にいくつかの異なる解決策を見つけましたが、それらすべてに問題があります。

バイナリ共有: 私が見つけた一般的な方法の 1 つは、コンパイルされたバイナリを開発ブランチの下のフォルダーに分岐することでした。私の問題は、迅速に修正する必要がある共有コードのバグをどこで検出した場合、問題のコードがコンパイルされているかということです。そして、どこでバグを修正するかを決めれば、共有コード ベースにすべての変更を加えることができます。

プロジェクトの共有: ここでの私の主な問題は、許容できる方法でそれを行う方法です。私の最初のアイデアは、新しいイテレーションが開始されたときに、メイン ブランチからの変更を共有コードとマージして更新することでした。メインを開発ブランチにマージして、バグ修正の結果としての変更で開発ブランチを更新します。そして、共有コードの新しい更新バージョンを開発ブランチにブランチします。しかし、私が理解していることから、ネストされたブランチを作成するため、これは TFS ではサポートされていません。

私の質問は、いくつかの共通プロジェクトをソリューション間で共有しながらそれらを分離したままにし、共通プロジェクトが変更されて新しいバグが発生することを心配することなく、メイン ブランチのバグを修正できるようにするにはどうすればよいかということです。ただし、共通プロジェクトのバグを修正し、それらの修正を共有共通プロジェクトにマージすることはできます。

4

2 に答える 2

2

私がしているのは、あなたが「バイナリ共有」と呼んだもののバージョンです。共有コードをサード パーティ プロジェクトと見なすことができれば、適切に運営されているサード パーティ プロジェクトに期待されるのと同じルールを開発に適用できます。つまり、( semVerなどを使用して) 共有コードを明確にバージョン管理し、可能な限り後方互換性を維持する必要があります。

はい、その通りです。つまり、共有コードにバグが見つかった場合は、別のバージョンを発行してから、このコードに依存するプロジェクトを再コンパイルする必要があります。

ただし、共有コードに依存する 2 つのプロジェクトのうち 1 つだけがバグ修正を必要とする場合、そのプロジェクトだけが新しいバージョンを取得する必要があることも意味します。

もう 1 つの利点は、いつ更新を行うかはプロジェクト次第であるということです。そのため、バグ修正プロセスをより自信を持って管理できます。

したがって、明確にするために、私の提案は、共有コード用の新しい TFS プロジェクトを作成し、サードパーティ プロジェクト (独自のビルド、NuGet など) に示すすべての愛を与えてから、ビルド アセンブリを取得することです。それを使用するプロジェクトのライブラリ フォルダーに。

お役に立てれば。

于 2012-06-19T08:38:28.363 に答える
0

皆さんの何人かが私の最終的な解決策に貢献してくれたので、皆さんの助けに感謝します。私がここでやったことを投稿することを選択しました。

私がやったのは、バイナリ共有とコード共有の両方でした

頻繁に更新され、反復が比較的速いプロジェクトについては、必要な共有プロジェクトを参照し、プロジェクトガイドラインを作成して、コードが特定の時間にわたって下位互換性があることを確認しました。

更新頻度の低いプロジェクトについては、コンパイルされたバイナリで分岐しました。また、バージョン管理された共有プロジェクトを作成し、下位互換性の競合するコードによってバージョン番号の主要コンポーネントが増加するようにするためのガイドラインを作成しました。

于 2012-06-24T11:19:17.117 に答える