问题
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?
回答1:
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
回答2:
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.
回答3:
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