2009-08-07 6 views
3

自動マージは完全ではありません。ライン編集の競合がないという理由だけでは、構文的な競合がないことを意味するわけではなく、意味論的な競合がないことを意味するものではありません。競合をマージする可能性のない変更をどのように作成できますか?

低競合の変更を作成する戦略はありますか?これはTDDや他のアプローチから逸脱するものですか(確かにTDDはそれらを捕まえるのに役立ちますが、それは実際に防止しますか?)

答えて

3

single responsiblity principleに違反するクラスは、マージするのが最も難しいです。おそらくマージするのが難しいクラスを見つけることは、おそらくより多くの部分の方向にリファクタリングする必要があるという兆候です。

+0

特に機能が論理的に結合されている場合は、常にバランスを崩しにくい。 – wowest

+1

それはむしろ実用的なアドバイスだと思います。 "合併症"のために設計しないでください、あなたはそれを必要としないかもしれません。しかし、合併が苦痛であれば、リファクタリングしてください。 – MatthewMartin

+0

はい、それを飲み込む方が簡単です。 – wowest

2

まず、コードベースはモジュール化されている必要があります。次に、必要なのはと残りのチームとのコミュニケーションです。誰もが何をしているのかを知るべきです。内部APIに変更がある場合は、チーム全体に明確にする必要があります。

コミットする前に必ず最後のバージョンをフェッチし、複雑なマージが必要な場合はローカルで実行してください。

これは実際には人間の問題であり、技術的な問題ではありません。ソース管理は、適切な通信チャネルを置き換えません。あなたのプロジェクトマネージャーはすべての変更の最上位にあるべきであり、変更が複数の人々に及ぶときに気づくべきです。

また、一般的な意味が必要です。 :)

ユニットテストは、マージ時に現れる最も捉えにくいバグを検出するのに役立ちます。

+0

これは本当に不自由な答えです。私は常に私のチームに話します。私たちのコードベースはモジュラーです。誰かがいつAPIを変更しているかを知っています。 – wowest

+0

これは不毛の答えです。どのチームがそれらのことを伝えていないのですか?どのような正常なVCSではローカルにマージされませんか?誰が常識を持っていないのですか?それはその定義です。意味解析に問題がある場合に単体テストが失敗するため、TDDが役に立ちます。なぜそれを太字にするのか分からないのですか? – wowest

+1

VCS *はコミュニケーションの代替品と考えている人もいます。それが不可能だと思うならhttp://thedailywtf.comを見てください。 – voyager

1

可能であれば、同じコードブロックの同期編集を避けるようにしてください。十分にモジュール化されたアーキテクチャ(小さなクラス、分離された機能)を持つことで、ほとんどすべてのことが可能になります。

私たちはこれまでに衝突があった場合、未解決のコードの単体テストに数分間書き込むことで解決することがよくあります。

4

私のコミットが小さいほど、マージの競合が起こりにくいことがわかりました。大きな問題を抱えている人々は、いつも何日も休みを取って物事に取り組んでいるように見えます。

今私は2人のチームに取り組んでいます。ここでは、常に同じコードベースにいます。私たちはそれぞれ個人ブランチで働いて、何か作業があるときはいつでも共有ブランチに統合します。それは通常1日に数回です。ほとんどの場合、コンフリクトをマージすることはほとんどありません。

リポジトリから最新のコードを頻繁に入手してください。独自のブランチで作業して、チームの残りの部分に影響を与えることなく、変更をコミットして他の人々の作業をマージすることができます。次に、できるだけ頻繁に自分のコードを共有ブランチにプッシュして、変更ができるだけ小さくなるようにします。

また、チームに相談してください。他の人が特定のファイルで作業していることが分かっている場合は、作業を開始するまで待つことをお勧めします。助けてもらえない場合もありますが、少なくともコミュニケーションは、驚いた。

関連する問題