問題タブ [merge-conflict-resolution]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git リポジトリでマージの競合を解決するには?
Gitリポジトリでのマージの競合を解決したいと考えています。
どうやってやるの?
git - バイナリ ファイルとの Git 競合の解決
私は Windows で Git (msysgit) を使用して、これまで行ってきた設計作業の変更を追跡しています。
今日、私は別の PC (リモート リポジトリを使用brian
) で作業しており、今日行った編集をラップトップの通常のローカル バージョンにマージしようとしています。
私のラップトップではgit pull brian master
、変更をローカル バージョンにプルしていました。メインの InDesign ドキュメント以外はすべて問題ありませんでした。これは競合として表示されます。
PC 上のバージョン ( brian
) は保持したい最新のものですが、レポにこれを使用するように指示するコマンドがわかりません。
ファイルをラップトップに直接コピーしようとしましたが、これによりマージプロセス全体が壊れているようです。
誰かが私を正しい方向に向けることができますか?
git - ブランチ内のファイルの削除によるマージの競合を修正するにはどうすればよいですか?
ブランチを作成し、dialog
それをブランチにマージしようとするとmaster
。2 つの競合があります。解決方法がわかりませんCONFLICT (delete/modify)
。どうすればよいか教えてください。
を開きsrc/DialogAdapter.java
、競合を修正して、git add src/DialogAdapter.java
. 他に何をする必要がありますか?
sqlite - 他の更新が存在しない場合は挿入しますか?
古典的な「新しいレコードを挿入する方法、または既存のレコードを更新する方法」の解決策をいくつか見つけましたが、SQLiteでそれらを機能させることができません。
次のように定義されたテーブルがあります。
私がやりたいのは、一意の名前のレコードを追加することです。名前がすでに存在する場合は、フィールドを変更したいと思います。
誰かがこれを行う方法を教えてもらえますか?
mercurial - Mercurial、競合、マージ、後でさらに競合が発生しますが、Mercurialは最初の解決を覚えていますか?
このシナリオを想像してみてください。
- アリスとボブはどちらも、1つのテキストファイルを含む中央マスターMercurialリポジトリのクローンを作成します
- アリスとボブの両方がファイルの同じ行に変更を加え、コミットします
- ボブは中央リポジトリにプッシュバックしますが、アリスはプッシュバックしません
- アリスは今、彼女のリポジトリに引き込み、彼女が2つの頭を持っていることに気づき、マージします
- マージは競合であるため、彼女は競合を解決します
- その後、アリスはコミットしますが、プッシュしません
- ボブは、ファイルの他の場所(つまり、最初の変更の近くではない場所)でファイルにさらに変更を加え、コミットしてプッシュします。
- アリスは、マージされたファイルで、ボブが変更したのと同じ場所で同様の変更を行い、コミットします
- アリスは引っ張って、さらに別の双頭のリポジトリを発見し、彼女はマージします
上記のシナリオの別のビューを次に示します
(「CHANGE」の後の数字は、その人がファイルの「部分X」を変更したことを意味します。両方のユーザーが同じ部分を変更した場合、変更が異なる場合は、マージの競合が発生します)
この時点で、私の質問はこれです:
- マージツールは、彼女の最初のマージ解決を考慮に入れますか?ボブはアリスの変更をプルしたことがないため、彼のコピーには、アリスが行った変更、最初の変更(ボブと競合していた)、マージ、およびボブの最新の変更と競合している最新の変更がまだ含まれていません。 。
ボブのバージョンのファイルとアリスのバージョンのファイルを取得し、任意のマージプログラムに渡した場合、両方の変更に競合のフラグが立てられます。
言い換えると、競合ツールは、元の競合と新しい競合の両方を解決するように、または最新の競合のみを解決するようにアリスに要求しようとしますか?
MercurialはAliceに最新の競合を解決するように依頼するだけだと推測しています(私はこれを試していませんが、この問題をテストするための何らかのテストスクリプトを作成しようとしています)。
サードパーティの差分/マージプログラムを使用するようにMercurialを設定するとどうなりますか?これは引き続き適用されますか?たとえば、Beyond Compareを使用するようにインストールを構成しましたが、2つのファイル(ボブの変更のみとアリスの変更+マージ解像度)は、初期解像度の有無にかかわらず提供されますか?言い換えれば、Beyond Compareを使用している場合、ここでも正しいことが起こります(それがまったく行われていると仮定します)。
git - GIT 1 つのファイルで 2 つ以上のマージの競合 - p4merge はどのように処理しますか?
- GIT p4merge - 同じファイルに 2 つ以上の競合があります
p4merge を GIT と統合しましたが、この状況に一度遭遇しました。
マージの競合があるファイルがあります。ファイル foo.c には、3 つの異なるコード行 (最初の行に競合があり、途中のいくつかの行に競合があります) でマージの競合があります。
競合の最初の行 (競合の他の行ではなく) を解決して保存すると (p4merge の [保存] ボタンを使用して)、インデックスに foo.c が追加され、コミットすると、git によってエラーが発生せずにコミットできるようになります。または、同じファイル内の競合する他の行を解決するための警告。
これは GIT または p4merge の問題ですか? ファイルに競合する他の行があることをGITが警告またはエラーにする必要があると思います。しかし、それはコミットするだけです。
- GIT で特定のファイルをマージする
私が持っている他の質問は、特定のファイルをマージするために開発者を送ることができるコマンドはありますか? git mergetool を実行すると、すべてのマージ競合が 1 つずつ開かれますが、代わりに、この選択したファイルをマージできる clearcase のような方法はありますか?
merge-conflict-resolution - マージの競合を解決する際にコードを変更してもよいですか?
マージの競合の解決に関する「ベスト プラクティス」の質問があります。
マスターがあり、ロギング機能を導入した機能ブランチをマスターにマージする必要があるとしましょう。さらに、マージ中に、マスターの一部の印刷ステートメントが変更され、機能ブランチのログ ステートメントに置き換えられたため、競合が発生したとしましょう。
さて、手動でマージを解決する際に、競合を解決する人が、ロギングに関連しているが機能ブランチでまだ処理されていないコードを置き換えることも許可されていると思いますか? たとえば、競合を含むコード ブロックでは、新しい print ステートメントも master に追加されました。まだ機能ブランチに含まれていなかったため、誰かが正しいログ ステートメントに置き換えない限り、マージされたコードに残ります。
それとも、マージは実際の競合にのみ触れ、上記のようなすべての矛盾を将来のコミットに残すべきですか?
mercurial - Mercurial マージの素晴らしさ - 足りないものは何ですか?
私はしばらく Mercurial を使用してきましたが、何度も言われる「事実」が 1 つあります。
実際、昨日 Fogcreek によって作成されたビデオを見ているときに、このビデオを見ているときに私を襲いました。このビデオ: Fog Creek Kiln: Unlock the power of DVCS for your company .
そのビデオの 1:39 あたり以降では、他のバージョン管理システムがリビジョン (つまり、スナップショット) を追跡するのに対し、DVCS のような Mercurial は変更セット (つまり、スナップショット間で何が起こったのか) を追跡することを強調しています。
これにより、シナリオのマージが有利になり、例が示されます。あるブランチで関数を移動し、別のブランチで同じ関数を変更すると、Mercurial はそれをマージできます。
そして、これは他の場所で言及されているのを見ましたが、今は直接リンクを見つけることができません.
これは私にはうまくいかないようです。
編集: これは、TortoiseHg のデフォルトの "beyondcompare3" マージ ツール構成の問題です。以下の構成を Mercurial.ini ファイルに追加したところ、期待どおりに動作するようになりました。確かに、自動マージできない場合は GUI ツールにパントしますが、この質問で説明されているマージは、プロンプトなしで実行され、すぐに正しいことを実行します。
これをテストするために、このファイルをリポジトリにコミットしました。
次に、この変更セットから派生する 2 つの並行変更セットで、次の 2 つの変更を行いました。
- Function1 関数をファイルの末尾に移動しました
- Function1 内のメッセージを変更しました
次にマージを試みたところ、Mercurial はマージ競合ウィンドウを表示し、何をしたかを把握しようとしました。
基本的に、移動前の Function1 の位置にある Function2 のテキストを変更しようとします。
こんなはずじゃなかった!
私の例を再現するためのソースファイルは次のとおりです。
リポジトリを生成するためのバッチ ファイル:
ファイルの 3 つのバージョン、example1.linq、example2.linq、example3.linq:
例 1.linq:
例 2.linq:
Example3.linq:
git - GIT でファイルの競合の一部を解決する
議論したいシナリオは、開発者がマージの競合を解決するために cd する共有リポジトリであるマージ リポジトリがあることです。
- 1 つのファイルに 2 つ以上のマージ競合があります。
- 各競合は別のユーザーで解決する必要があります。
- 各開発者がこのリポジトリに cd して、マージの競合を解決します。
- foo.cに3つのマージ競合があるとしましょう
- 1 人のユーザーが foo.c の単一の競合を解決し、グラフィカル マージ ツールに保存します。
現在、GIT はこれを「git add」として認識しますが、ファイルの他の部分にはまだ競合があります。次に、別の開発者が「git mergetool foo.c」を実行しても、競合のために foo.c がポップアップしません。
この問題を解決するグラフィカル ツールはありますか。複数のユーザーが競合を解決して同じファイルに保存できるようにします。
git - 誰かが私の git コミットから適当に選んで自分のコミットを作成した場合、どうすればマージできますか?
私が誰かの git リポジトリをフォークして、A、B、C、および D をコミットしたとします。私がフォークした人は、A と C をチェリーピックします。したがって、A' と C' になります。また、X、Y、Z のコミットを自分で作成します。結局のところ、私のブランチには ABCD があり、彼のブランチには A' C' XY Z があります。両方のブランチが公開されていると仮定すると、リベースは魅力的なオプションではありません。また、XYZ が ABC D のいずれとも競合しないと仮定します。これら 2 つのブランチを便利な方法でマージするにはどうすればよいですか? 単純にマージしてから、すべてを手動で解決する必要がありますか? マージされたヘッドのログに重複するコミット メッセージについてできることはありますか? これらの 2 つのブランチは、今後、互いのコミットをチェリー ピックすることによってのみ同期する運命にありますか?