web-dev-qa-db-ja.com

FileMergeはSourceTreeから起動した直後に終了します

私は定期的にAtlassian SourceTree(Mac OS X)を使用してFileMergeを起動し、gitマージの競合を解決しています。突然、動作が停止しました。右クリックしてResolve Conflicts > Launch External Merge Toolを選択すると、FileMergeが起動し、中間ファイルを作成して、すぐに終了します。 SourceTreeは、マージプロセスが完了したと解釈します。

問題は何ですか?どのようにデバッグ/修正できますか?

前の質問 ' SourceTree filemergeはすぐに終了し、4つのファイルを作成します。それを修正する方法は? 'はこの特定のシナリオに対応していません(1つには、FileMergeがタイトルで終了するが、本文には、FileMergeが/ dev/nullをパネルの1つとして表示していると表示されています。また、マージの競合は、ファイルが削除されたことが原因ではありません。)

37
Greg Kopff

問題を診断するために、ターミナルからopendiffを実行しました。次のエラーを受け取りました:

xcode-select:エラー:ツール 'opendiff'にはXcodeが必要ですが、アクティブな開発者ディレクトリ '/ Library/Developer/CommandLineTools'はコマンドラインツールのインスタンスです

解決するには:

  1. 開くXcode> Preferences> Locations
  2. コマンドラインツールの横にあるドロップダウンボックスをクリックし、現在のXcodeバージョンを選択します。 (私は最近、新しいMacにXcodeをインストールしたため、これは空でした。)

Command Line Tools

  1. ターミナルでopendiffを再度実行すると、上記のエラーは表示されなくなります。

FileMergeはSourceTreeからLaunch External Merge Toolをクリックすると正しく開きます。

116
ChrisJF

私にとって、SourceTreeはFileMergeも起動しませんでした。 Launch External Merge Toolをクリックしても何も起こりませんでした。

さらに、ターミナルでopendiffを実行すると期待どおりに動作しました:

$ opendiff
opendiff[64176:5561154] too few arguments
opendiff[64176:5561154] usage: opendiff file1 file2 [-ancestor ancestorFile] [-merge mergeFile]

私を助けたのは手動でSourceTreeを構成して、次の引数を指定したopendiffコマンドを介してFileMergeを使用するようにしました:$LOCAL $REMOTE -ancestor $BASE -merge $MERGED

SourceTree manually configure to use opendiff

このように、SourceTreeは期待どおりにFileMergeを開きます。

12
Tom Kraina

Xcodeが最近更新された場合は、新しいライセンス条項に同意する必要がある場合があります。ライセンス条項に同意しない場合、FileMerge(SourceTreeから起動した場合)はすぐに終了します。

これを確認するには、シェルを開いて通常のユーザーとして実行します。

$ opendiff

ライセンスに問題がある場合は、それがわかります。新しいライセンス条項に同意するには、Sudoを使用してopen diffを実行する必要があります。

$ Sudo opendiff

ライセンス条項に同意したら、Resolve Conflicts > Launch External Merge Toolを使用してSourceTreeからFileMergeの起動を再試行できます。 FileMergeが起動し、正常に動作します。

8
Greg Kopff

これは役に立ちました: https://Gist.github.com/kylefox/4512777

Xcodeユーティリティが稼働するタイミングをシステムに通知します。

Sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

「opendiff」をデフォルトのマージツールとしてグローバルに設定します。

git config --global merge.tool opendiff

8
user3027622

これはメッセージの解決にも機能します"xcode-select:error:tool 'opendiff' require Xcode、but active developer directory '/ Library/Developer/CommandLineTools' is a command line tools instance"

Sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
4
fabe