One of my favorite workflows with svn is to use Beyond Compare's folder comparison feature to see the net differences between two branches, or a branch and the trunk. Is there a way to do this in git without having to manually create multiple clones of the same repository?
As I ask this question, it occurs to me that I could write a script that would clone the current repo to a temporary directory, checkout the desired branch, and then call BCompare.exe with the two directories as arguments. The folder comparison view is invoked with
BCompare.exe path/to/folder1 path/to/folder2
Does this sound reasonable? Would I be able to delete the extra clone after I'm done with Beyond Compare?
It sounds like you've already figured out the right answer -- use git clone
and git checkout
to set up a directory to compare to, then run BCompare.exe
. The below script might be a good starting point.
#!/bin/sh
( # execute in a subshell so you can continue
# working in the current shell
set -o xtrace # bash setting that echos each command before it's executed
> /tmp/auto_bcompare_log # truncate existing log file
BRANCH="$1" # get branch argument from command line
TEMPDIR=`mktemp -d` # get a temp directory
CWD=`pwd` # remember the current directory
git clone $CWD $TEMPDIR
cd $TEMPDIR
git checkout $BRANCH
cd $CWD
BCompare.exe $CWD $TEMPDIR
rm -rf $TEMPDIR
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect
# stdout/stderr/stdin
This (comparing directories instead of file-by-file) should be available soon:
See [ANNOUNCE] Git 1.7.11.rc1:
"
git difftool
" learned the "--dir-diff
" option to spawn external diff tools that can compare two directory hierarchies at a time after populating two temporary directories, instead of running an instance of the external tool once per a file pair.
See "Patch difftool
: teach difftool
to handle directory diffs", from this fork of git:
When '
difftool
' is called to compare a range of commits that modify more than one file, it opens a separate instance of the diff tool for each file that changed.The new '
--dir-diff
' option copies all the modified files to a temporary location and runs a directory diff on them in a single instance of the diff tool.
Just git diff
with the names or hashes of the branches you want to compare, simple as that. Actually, you can compare any two commits by their hashes.
来源:https://stackoverflow.com/questions/4248830/directory-comparison-of-git-branches