私は自分の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.
SourceTreeから、[ツール] - > [オプション]をクリックします。次に、[全般]タブで、SourceTreeがGit設定ファイルを変更できるようにするためのチェックボックスをオンにします。
次に、[差分]タブに切り替えます。下半分では、ドロップダウンを使用して、差分とマージを実行するために使用する外部プログラムを選択します。私は KDiff をインストールしました。完了したら、[OK]をクリックします。
マージがあるときは、[アクション] - > [競合の解決] - > [外部マージツールの起動]の順に選択します。
私はSourceTreeをTortoiseMerge/Diffと一緒に使用しています。これは非常に簡単で便利なdiff/mergeツールです。
あなたもそれを使用したい場合は、その後:
TortoiseMerge/Diffのスタンドアロンバージョンを入手してください(非常に古く、TortosieSVNのバージョン1.6.7以降はスタンドアロンで出荷されないため、2011年7月以降です)。この回答のリンクと詳細。
TortoiseIDiff.exe
とTortoiseMerge.exe
を任意のフォルダ(私の場合はc:\Program Files (x86)\Atlassian\SourceTree\extras\
)に解凍します。
SourceTreeでTools > Options > Diff > External Diff / Merge
を開きます。両方のドロップダウンリストでTortoiseMerge
を選択します。
OK
を押して、SourceTreeにあなたの現在のTortoiseIDiff.exe
とTortoiseMerge.exe
の位置を指定します。
その後、ローカルリポジトリ内の競合する各ファイルのコンテキストメニューからResolve Conflicts > Launch External Merge Tool
を選択できます。これによりTortoiseMergeが開きます。ここですべての衝突に簡単に対処できます。終了したら、単純にTortoiseMergeを閉じ(変更を保存する必要さえない。これはおそらく自動的に行われるでしょう)、数秒後にSourceTreeがそれを適切に処理するはずです。
唯一の問題は、 適切なオプションがチェックされていなくても 、自動的にバックアップコピーが作成されることです。
[競合の解決] - > [コンテンツ]メニューが無効になっていると、[保留中のファイル]リストに表示されることがあります。ドロップダウンから[競合するファイル]オプションを選択する必要があります(トップ)
それが役に立てば幸い