Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's a script (originally by Toby White) that I hacked up to compare the entire directory structure in FileMerge rather than opening each file individually.</p> <pre><code>#!/bin/sh # # This script was written by Toby White under an unknown license, and published # on the Git mailing list: # # http://kerneltrap.org/mailarchive/git/2007/11/21/435536 # # Superficial changes were made by Nathan de Vries to allow the script to be # run under Leopard. # # Adapted by Daniel Miller : http://stackoverflow.com/a/12957945/10840 # - allow changes to be saved back to the working copy when diffing against HEAD # - work when FileMerge is already open # - always compare archived copies so ignored files are excluded from the diff # - allow diff of unstaged changes (no arguments); creates a dangling commit # - allow diff of subdirectory within the repo # # Known issues: # - Always uses the same two directories (/tmp/git-opendiff-old and # /tmp/git-opendiff-new); THEY WILL BE DELETED IF THEY ALREADY EXIST. # Ugly, I know, but it makes the script work even if FileMerge is open. OLD= NEW= FILEPATH= HAS_ARGS=no IGNORE_TO_PATH=no # loosely based on https://stackoverflow.com/a/14787208/10840 while [ "$#" -ge 1 ]; do HAS_ARGS=yes case "$1" in -h) echo "usage: $0 [--cached | &lt;ref&gt; [&lt;ref&gt;]] [-- &lt;path&gt;]" exit 0 ;; --cached) # diff staged changes NEW=$(git write-tree) OLD=HEAD IGNORE_TO_PATH=yes shift ;; --) shift FILEPATH="$@" break ;; *) if [[ "$IGNORE_TO_PATH" == "no" ]]; then if [ -z "$OLD" ]; then OLD="$1" else NEW="$1" IGNORE_TO_PATH=yes fi fi shift ;; esac done if [ -z "$OLD" ]; then OLD=HEAD fi if [[ "$HAS_ARGS" == "no" ]]; then # diff unstaged changes # http://stackoverflow.com/a/12010656/10840 NEW=$(git stash create) echo "diff unstaged changes" fi TMP_OLD=/tmp/git-opendiff-old TMP_NEW=/tmp/git-opendiff-new test -d $TMP_OLD &amp;&amp; rm -rf $TMP_OLD; mkdir $TMP_OLD test -d $TMP_NEW &amp;&amp; rm -rf $TMP_NEW; mkdir $TMP_NEW TMP_OLD=$TMP_OLD/$OLD; mkdir -p $TMP_OLD git archive --format=tar $OLD $FILEPATH | (cd $TMP_OLD; tar xf -) if test -z "$NEW"; then SAVE_TO=$(git rev-parse --show-cdup) test -z "$cdup" &amp;&amp; SAVE_TO=. git archive --format=tar HEAD $FILEPATH | (cd $TMP_NEW; tar xf -) opendiff $TMP_OLD/$FILEPATH $TMP_NEW/$FILEPATH -merge $SAVE_TO &amp;&gt; /dev/null &amp; else TMP_NEW=$TMP_NEW/$NEW; mkdir -p $TMP_NEW git archive --format=tar $NEW $FILEPATH | (cd $TMP_NEW; tar xf -) opendiff $TMP_OLD/$FILEPATH $TMP_NEW/$FILEPATH &amp;&gt; /dev/null &amp; fi </code></pre> <p>Put this somewhere on your path. I prefer <code>~/bin/git-opendiff</code>, which means <code>git opendiff ...</code> works as expected.</p> <p>Update: diff unstaged changes when called with no arguments, added <code>-h</code> (help) option.</p> <p>Update: diff subdirectory with <code>-- &lt;path&gt;</code>. Also better argument parsing.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload