2017-12-23 14 views
1

マージ時に競合を予測して回避する方法があるかどうか疑問に思っていましたか?どのような変更が起こりますか?

私の質問は、どのような変更が実際にどのような変更をもたらすかということです。これを実験から推論するのは難しいです。

コードを変更すると、どのような変更が無害で、どのような変更によって問題がマージされ、ユーザーの注意が必要になりますか?例えば

:(開始時、終了時又は途中で)テキストを削除/追加することにより、ラインを変更ライン

  • を除去ライン
  • を置き換える新しい行
  • を添加

    ルールはありますか?

  • +0

    Gitのアルゴリズムは、同じストーリーの2つのバージョンを合理化する方法を見つけられない場合、自動マージの代わりに衝突します。これについて心配するべきではなく、良いコードを書くことに集中してください。私はあなたが描いているすべてのシナリオから矛盾を見てきました。 –

    答えて

    1

    2つのブランチに同じファイルと同じ行に変更があった場合、競合が発生します。そうでない場合、競合は発生しません。

    +0

    これはいつも真実だとは思わない。だから、もし私が '.java'ファイルに一つのコメントを追加すると言っています。 '// comment'は常に競合しますか? –

    +0

    他の誰かがその行または隣接行を編集した場合のみ。つまり、重複している変更があると競合が発生するため、バージョン管理システムは変更の適用方法を知らないためです。 – jeprubio

    +0

    コメントに矛盾があります。 1つのbrahncにコメントの前にスペースを1つ追加し、別のブランチにコメントを追加してマージしてください。 – jeprubio

    1

    一般に、同じ行に影響する変更は、競合の原因となります。行を削除して他の人がそれを変更したり、インデントを変更して行を変更すると、競合が発生します。

    これは、競合を引き起こさない変更は、あなたの上に10行変更したり、ソース管理であなたと矛盾しないように、物事を互いに混乱させることはできません。変更が使用している変数の名前を変更します。これは自動化されたビルドシステムが存在する理由です:

    +0

    一般的な経験則では、2人の人が同じファイルを混乱させると、それらをマージしようとするときに競合が発生する可能性があります。これは、われわれの仕事をよりよく調整し、その葛藤を解決することができないため、知っておきたいことです。確かに、他のエラーがあるかもしれませんが、IDEのデバッガ/コンパイラの問題を解決してからリポジトリの問題を解決する方が簡単です。 – t3chb0t

    +0

    確かに、これは一般的なルールとして機能しますが、1つの大きなプロジェクトでは、多くのユーティリティ関数などを構築しても、同じファイルを変更しないと問題が発生します。 たとえば、プロジェクトに設定設定をロードするユーティリティクラスがあり、ユーザ "Bob"がその機能を変更してコードをどこでも更新しますが、 "Alice"は自分が書いた新しいファイルで設定を使用し始めました。 AliceがBobの変更に必要な方法で関数を呼び出さなかったので、全く新しいファイルがビルドを中断します。 – bolt

    関連する問題