Skip to content

Instantly share code, notes, and snippets.

@bkeating
Created March 11, 2010 21:36
Show Gist options
  • Save bkeating/329690 to your computer and use it in GitHub Desktop.
Save bkeating/329690 to your computer and use it in GitHub Desktop.
HOWTO: Using FileMerge (opendiff) with Git on OSX

HOWTO: Using FileMerge (opendiff) with Git on OSX

FileMerge (opendiff) can really come in handy when you need to visually compare merging conflicts. Other times it's just a nice visual way to review your days work.

The following method works by creating a simple bash script (git-diff-cmd.sh) that sets us up with the proper command line arguments for Git to pass off files to FileMerge.

  1. Open the bash script for editing:

     vi ~/bin/git-diff-cmd.sh
    
  2. Paste the following code:

     #!/bin/sh 
     /usr/bin/opendiff "$2" "$5" -merge "$1"
    
  3. Make the bash script executable:

     chmod +x ~/bin/git-diff-cmd.sh
    
  4. Tell Git (globally) to run our bash script when 'git diff' is issued:

     git config --global diff.external ~/bin/git-diff-cmd.sh
    

Now head over to your Git-aware project directory and issue a git diff /path/to/modified/file.py and FileMerge will pop up showing you the differences against it and HEAD.

You can also do things like git diff --cached to review all the changes against HEAD.

@dfernandez79
Copy link

git config --global alias.opendiff difftool --no-prompt --tool opendiff --dir-diff

this did not work for me. just outputs the usage text.

Add quotes to the aliased command:

git config --global alias.opendiff "difftool --no-prompt --tool opendiff --dir-diff"

@nonopolarity
Copy link

can you have opendiff without installing the whole XCode app? (which is huge)

@bkeating
Copy link
Author

I don’t think running opendiff is possible without Xcode, unfortunately. See top answer on this thread: https://apple.stackexchange.com/questions/108025/is-it-possible-to-use-filemerge-as-standalone-app

@1oo7
Copy link

1oo7 commented May 4, 2020

Filemerge sucks. Pasting in lines of text it always deletes out all the whitespace.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment