web-dev-qa-db-ja.com

対話的に(視覚的に)SourceTree / gitの衝突を解決する方法

私は自分のgitプロジェクトに(Windows)SourceTreeを使っています。コマンドプロンプトかLinux端末のどちらでもできます。

しかし、私は対話的かつ視覚的に衝突を解決するための素晴らしい方法があるかどうか疑問に思います。たとえば、pullが競合を検出した場合は、GUIベースの競合ツール(P4Mergeなど)をポップアップします。出来ますか?

私は常に手動による競合解決を行っていますが、これは非常に苦痛です。

これは、例えばSourceTreeからのgit pullメッセージです。

git -c diff.mnemonicprefix=false -c core.quotepath=false pull --no-commit Origin master
From W:\repo\
 * branch            master     -> FETCH_HEAD   

Updating 33c07bf..41e0249

error: Your local changes to the following files would be overwritten by merge:
    foo.cpp
    goo.cpp
    goo.hpp
Please, commit your changes or stash them before you can merge.
Aborting    

Completed with errors, see above.
115
Nullptr

SourceTreeから、[ツール] - > [オプション]をクリックします。次に、[全般]タブで、SourceTreeがGit設定ファイルを変更できるようにするためのチェックボックスをオンにします。

次に、[差分]タブに切り替えます。下半分では、ドロップダウンを使用して、差分とマージを実行するために使用する外部プログラムを選択します。私は KDiff をインストールしました。完了したら、[OK]をクリックします。

マージがあるときは、[アクション] - > [競合の解決] - > [外部マージツールの起動]の順に選択します。

125
gtrig

私はSourceTreeをTortoiseMerge/Diffと一緒に使用しています。これは非常に簡単で便利なdiff/mergeツールです。

あなたもそれを使用したい場合は、その後:

  1. TortoiseMerge/Diffのスタンドアロンバージョンを入手してください(非常に古く、TortosieSVNのバージョン1.6.7以降はスタンドアロンで出荷されないため、2011年7月以降です)。この回答のリンクと詳細。

  2. TortoiseIDiff.exeTortoiseMerge.exeを任意のフォルダ(私の場合はc:\Program Files (x86)\Atlassian\SourceTree\extras\)に解凍します。

  3. SourceTreeでTools > Options > Diff > External Diff / Mergeを開きます。両方のドロップダウンリストでTortoiseMergeを選択します。

  4. OKを押して、SourceTreeにあなたの現在のTortoiseIDiff.exeTortoiseMerge.exeの位置を指定します。

その後、ローカルリポジトリ内の競合する各ファイルのコンテキストメニューからResolve Conflicts > Launch External Merge Toolを選択できます。これによりTortoiseMergeが開きます。ここですべての衝突に簡単に対処できます。終了したら、単純にTortoiseMergeを閉じ(変更を保存する必要さえない。これはおそらく自動的に行われるでしょう)、数秒後にSourceTreeがそれを適切に処理するはずです。

唯一の問題は、 適切なオプションがチェックされていなくても 、自動的にバックアップコピーが作成されることです。

10
trejder

[競合の解決] - > [コンテンツ]メニューが無効になっていると、[保留中のファイル]リストに表示されることがあります。ドロップダウンから[競合するファイル]オプションを選択する必要があります(トップ)

それが役に立てば幸い

4
ozkary