ブランチを開発にマージする準備が整うまでに(エンファシスマイニング)
での競合の処理git merge
は、多くの場合よりも簡単ですgit rebase
。Gitマージでは、一度に変更されたファイルのリスト全体を見ることができます。他の同僚によっていくつコミットが行われたとしても、一度マージする必要があります。リベースワークフローを使用すると、同じ競合が何度も発生する可能性があり、手動で確認する必要があります。13番目のコミットを修正して、トンネルから光が見えないように感じることができます。
私の経験では、繰り返されるリベースの競合を単純に解決しようとしたときに、誰かの変更を失うか、コンパイルさえもしないアプリケーションを使用してしまいました。多くの場合、私と同僚は多くの作業を行いましたが、競合を繰り返す複雑さに圧倒され、リベースコミットを数回行った後、以前の作業を中止して失わなければなりませんでした。
いくつかのテクニックをお勧めしますが、それらはタスクを自動化するよりもマージを簡単にするのに役立ちます。
- リソース/言語ファイル。あなたが持っている場合は、添加剤のリソースファイルへの変更を、あなたは簡単に思い出すことができるようにあなたが常にファイルの末尾に移動することを確認してください、あなたに対する変更他人 "変更を。変更を下部にコピーして貼り付けるか、競合マーカーを削除することができます
- 行う。そうではありません。絶対に。RE-フォーマット。あなたもあなたの仲間の開発者も、毎日の作業中に「大規模なコードの再フォーマット」を実行してはなりません。コードの再フォーマットにより、競合管理に過剰な数の誤検知が追加されます。コードの再フォーマットが可能
- 自動ツールを使用するとすぐに、たとえばすべての開発者がすべてのコミットで増分的に(たとえば、Eclipseには保存時に再フォーマットするオプションがありますが、vanilla Visual Studioにはありません)。絶対にすべての開発者は、IDEで使用されるフォーマットファイルにコード化された同じコードフォーマット標準を使用する必要があります。あなたにアイデアを与えるために、それが4つのスペースまたは2つのタブである場合、それは重要ではありませんが、誰もが同じものを使用する場合、それは本当に重要です。
- リリース直前、チームリーダー。人々がブランチで作業していないとき、つまりブランチする前に「コード再フォーマット」コミットが発生すると、物事が簡単になります
- 同僚間の仕事の分割を確認します。これはほとんどのエンジニアリングが来る部分です。他の回答で指摘されているように、異なるタスクを行う複数の開発者が同じリソースに触れる必要がある場合、それは設計臭です。並行開発者ごとにどの部分を変更するかについて、チームリーダーと話し合う必要がある場合があります。
また、私のチームのGitワークフローにはいくつかの悪い習慣があります。多くの場合、人々は自分のブランチに過剰にコミットしています。個人的に、開発者が「修正」というラベルの付いた10〜20のコミットを追加し、それぞれが1行または2行をコミットしているのを目撃しました。私たちのポリシーでは、コミットにはアイデアを伝えるためにJIRAチケットのラベルが付けられています。
@JacobRobbinsはgit rebase
、毎日のタスクを作成することを提案しています。彼のアプローチを前進させたいと思います。
まず、コミットの数を少数に減らすために、rebaseを1回使用します。そして、元の開発ブランチのみにリベースします。これは、分岐元のコミットです。一握りと言えば、3または4(たとえば、すべてのフロントエンド、すべてのバックエンド、すべてのデータベースパッチ)または人間が理解できる数字を意味します。それらを統合したらfetch
、アップストリームブランチ上でリベースを使用して作業します。これにより、チームが独自のアプローチを検討しない限り、競合からあなたを救うことはできませんが、あなたの人生の痛みは軽減されます。
特定のタスクについて追加の質問がある場合は、Stackoverflowで検索して質問してください。
[編集]ノーフォーマットおよびボーイスカウトルールについて。私が意味しているのは、あなたが触れていないコードを含むソースファイル全体をゼロからフォーマットする作業であることを強調するために、RE- フォーマットを少し言い換えました。常に独自のコードをフォーマットするのとは反対に(完全に少年のように)、IDEの機能を使用してファイル全体を再フォーマットするために、私を含む多くの開発者が使用されます。他の人がファイルに触れると、影響を受ける行の内容とセマンティクスが変更されていなくても、Gitはそれを競合と見なします。非常に強力な言語認識エディタのみが、競合がフォーマットにのみ関連していることを示唆し、最適なフォーマットのフラグメントを自動マージします。しかし、私はそのようなツールの証拠を持っていません。
結局のところ、ボーイスカウトルールは、他の人の混乱をきれいにすることを義務付けているわけではありません。ただあなたのもの。