How to use Kaleidoscope 2 with Git Tower?

git, git-tower

Solution

Update as of Git Tower 1.4.14

Git Tower (version 1.4.14 and above) now ships with Kaleidoscope 2 integration. The launcher scripts shown below should not be used anymore, as they do not work correctly with Kaleidoscope 2 final version.

Kaleidoscope provides the correct command line usage when Integration > Git merge is chosen. The correct launcher script for Git Tower looks like this:

~/Library/Application Support/Tower/CompareScripts/kaleidoscope2.sh

#!/bin/sh

LOCAL="$1"
REMOTE="$2"
BASE="$3"
MERGED="$4"

APPLICATION_PATH=/Applications/Kaleidoscope.app
CMD="$APPLICATION_PATH/Contents/MacOS/ksdiff"

"$CMD" --merge --output "$MERGED" --base "$BASE" -- "$LOCAL" --snapshot "$REMOTE" --snapshot

~/Library/Application Support/Tower/CompareTools.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <dict>
        <key>ApplicationIdentifier</key>
        <string>com.blackpixel.kaleidoscope</string>
        <key>ApplicationName</key>
        <string>Kaleidoscope</string>
        <key>DisplayName</key>
        <string>Kaleidoscope</string>
        <key>LaunchScript</key>
        <string>kaleidoscope2.sh</string>
        <key>Identifier</key>
        <string>kaleidoscope2</string>
        <key>SupportsMergeTool</key>
        <true/>
    </dict>
</array>
</plist>

Problem

Kaleidoscope 2 public beta was released this week and has gained merge functionality. Yay! However, the command-line usage is somewhat vague about the usage. I want to use Kaleidoscope together with Git Tower, how can I do that? ``` $ ksdiff --help usage: ksdiff - send files to Kaleidoscope command options: [--wait, -w | --no-wait] whether to wait for the document to be closed in Kaleidoscope before exiting FILE options: [--snapshot | --no-snapshot] whether the file is temporary. this option will override the heuristics ksdiff would otherwise use to determine this state. commands: --merge send a merge implies --wait --output OUTPUT use OUTPUT as the destination path for this merge. creates OUTPUT if it does not exist. [--base BASE] use BASE as the base content for this merge. can improve the quality of the default selections for some merges. FILE FILE the files to merge ``` Support docs for external merge tools from Git Tower

Original source