私は定期的にAtlassian SourceTree(Mac OS X)を使用してFileMergeを起動し、gitマージの競合を解決しています。突然、動作が停止しました。右クリックしてResolve Conflicts > Launch External Merge Tool
を選択すると、FileMergeが起動し、中間ファイルを作成して、すぐに終了します。 SourceTreeは、マージプロセスが完了したと解釈します。
問題は何ですか?どのようにデバッグ/修正できますか?
前の質問 ' SourceTree filemergeはすぐに終了し、4つのファイルを作成します。それを修正する方法は? 'はこの特定のシナリオに対応していません(1つには、FileMergeがタイトルで終了するが、本文には、FileMergeが/ dev/nullをパネルの1つとして表示していると表示されています。また、マージの競合は、ファイルが削除されたことが原因ではありません。)
問題を診断するために、ターミナルからopendiff
を実行しました。次のエラーを受け取りました:
xcode-select:エラー:ツール 'opendiff'にはXcodeが必要ですが、アクティブな開発者ディレクトリ '/ Library/Developer/CommandLineTools'はコマンドラインツールのインスタンスです
解決するには:
opendiff
を再度実行すると、上記のエラーは表示されなくなります。FileMergeはSourceTreeからLaunch External Merge Toolをクリックすると正しく開きます。
私にとって、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は期待どおりにFileMergeを開きます。
Xcodeが最近更新された場合は、新しいライセンス条項に同意する必要がある場合があります。ライセンス条項に同意しない場合、FileMerge(SourceTreeから起動した場合)はすぐに終了します。
これを確認するには、シェルを開いて通常のユーザーとして実行します。
$ opendiff
ライセンスに問題がある場合は、それがわかります。新しいライセンス条項に同意するには、Sudo
を使用してopen diffを実行する必要があります。
$ Sudo opendiff
ライセンス条項に同意したら、Resolve Conflicts > Launch External Merge Tool
を使用してSourceTreeからFileMergeの起動を再試行できます。 FileMergeが起動し、正常に動作します。
これは役に立ちました: https://Gist.github.com/kylefox/4512777
Sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer
git config --global merge.tool opendiff
これはメッセージの解決にも機能します"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