1

私が取り組んでいるプロジェクトは、必死にリファクタリングが必要です。問題は、通常、複数のブランチ(メンテナンス、新機能など)があり、ファイルやディレクトリを簡単に移動、名前変更、削除したり、変更をマージしたりできるかどうかわからないことです。私の恐れは、他の誰かが別のブランチのファイルを更新しているときに、リファクタリングブランチのファイルを移動することです。トランクにすべてがあり、ブランチが不要な小さなウィンドウを望んでいましたが、ビジネスには常に変更が必要です(すぐにまたはマイナーリリースの一部として)。

ソース管理はSubversionで管理されています。変更を他のブランチと同期させたまま、1つのブランチでプロジェクトを大幅に変更することは簡単/可能ですか?ブランチを最新の状態に保つために変更をマージするのはかなり得意であり、一度に小さなリファクタリングの変更を加えるだけでうまくいくかもしれません。そうでなければ、これは本当にリファクタリングのみに取り組む(つまり、他のブランチがない)時間を取っておくことによってのみ行うことができますか?私はビジネスオーナーにリファクタリングに時間が必要であることを納得させようとしてきましたが、彼らは同意しますが、今のところそれは不可能のようです。

リファクタリングに関する重要なことの1つは、(たまに1回だけでなく)常に実行する必要があるということです。これは実際のコード(関数の分割、重複コードの削除など)で実行できるように見えますが、ファイルの名前を適切に変更してグループ化することに自信がありません。

4

3 に答える 3

3

SVNでも実行可能ですが、さまざまな問題に直面することになると思います。リファクタリングをすべてのブランチに実行したい場合は、よく考えてみてください。リファクタリングされたコードをリリースブランチ(本番バージョンのマイナーフィックスをリリースするためのメンテナンスブランチ)にマージすることは合理的ではないようです。

SVNを使用すると、任意のブランチから任意のブランチにマージできますが、ブランチと元のブランチをマージする方が常に合理的です。したがって、次のようなものがある場合:

Rel-1.0          /---------------->
Rel-1.1         /   /------------------->
Trunk      --------------------------------*------>
FeatureA         \-------->  \       \     ^ (rev. X)
FeatureB                      \-->    \    |
Refactor                               \--->

リファクタリングでリファクタリングジョブを実行して他のすべてのブランチにマージする代わりに、リファクタリングブランチの変更をトランクに再統合して(リビジョンXで想定)、リビジョンXをトランクからこの変更が必要な他のブランチにマージする方が合理的です。 。リリースブランチ(Rel-1.0、Rel-1.1)の場合、それはおそらくチェリーピックになります。機能ブランチA/Bの場合、トランクに追いつきます(トランク内のすべてのものをマージすることにより)。

ブランチがトランクから大きく外れると、マージが難しくなることに注意してください。したがって、リファクタリングされたコードをマージしてブランチを解放する必要がある場合は、よく考えてください(トランクから大きく外れている可能性があります)。

また、SVNでの名前変更の追跡はそれほど適切に実装されていないことにも注意してください。たとえば、トランク内のファイルFの名前をFNewに変更し、SVNが処理するのはFからコピーしてFNewを追加し、Fを削除することです。これをブランチafaikにマージすると、SVNはトランク/からコピーしてbranch/FNewを追加します。 F、およびブランチ/Fを削除します。したがって、branch / Fを変更したことがある場合、新しいバージョンのSVN(おそらく> = 1.5)の場合、ツリーの競合が発生しますが、古いバージョンのSVNでは変更が失われます。新しいバージョンは少しうまく処理しますが、「正しく」名前を変更するためのマージを処理しているものはありません(これにより、branch/Fがbranch/FNewに移動します)。これにより、マージに余分な労力がかかり、2つのブランチが大きくずれている場合、マージがさらに困難になります。

于 2012-07-25T02:10:53.283 に答える
1

ブランチを大幅に変更すると、特に他の人が同じファイルに変更を加えているときに、コードをマージして戻すのに間違いなく問題が発生します。

ここで賢いスケジュールを立てることをお勧めします。現在作業されていないコードの部分で作業する必要があります。または、リファクタリングを通常の業務の一部にします。

于 2012-07-25T01:25:17.870 に答える
-1

1つのブランチを変更し、パッチファイルを作成し、同じパッチファイルを使用して他のすべてのブランチを更新できると思いますか?

于 2012-07-25T01:15:54.607 に答える