我最喜欢的svn工作流程之一是使用Beyond Compare的文件夹比较功能来查看两个分支或分支和主干之间的净差异。有没有办法在git中执行此操作而无需手动创建同一存储库的多个克隆?
当我问这个问题时,我发现我可以编写一个脚本,将当前仓库克隆到临时目录,检出所需的分支,然后使用这两个目录作为参数调用BCompare.exe。使用
调用文件夹比较视图BCompare.exe path/to/folder1 path/to/folder2
听起来合理吗?在完成Beyond Compare之后,我能否删除额外的克隆?
答案 0 :(得分:30)
这个(比较目录而不是逐个文件)应该很快就会出现:
见[ANNOUNCE] Git 1.7.11.rc1:
“
git difftool
”学会了“--dir-diff
”选项,可以在填充两个临时目录之后生成外部差异工具,这些工具可以一次比较两个目录层次结构 而不是每个文件对运行一次外部工具实例。
请参阅此Patch difftool
: teach difftool
to handle directory diffs:
当调用“
difftool
”来比较修改多个文件的一系列提交时,它会为每个更改的文件打开一个单独的diff工具实例。新的“
--dir-diff
”选项将所有已修改的文件复制到临时位置,并在diff工具的单个实例中对它们运行目录diff。
答案 1 :(得分:2)
听起来你已经找到了正确的答案 - 使用git clone
和git checkout
来设置要比较的目录,然后运行BCompare.exe
。以下脚本可能是一个很好的起点。
#!/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 :(得分:0)
只需要git diff
包含您要比较的分支的名称或哈希值,就这么简单。实际上,你可以通过哈希比较任意两个提交。
答案 3 :(得分:0)
首先确认您具有无可比拟的可访问性,
您可以使用:git difftool --tool-help
列出可用的比较工具。
(将其设置为默认值,请参见Git Diff with Beyond Compare)
如果您无法比拟的话,可以使用以下其中一项:
git difftool branch1 branch2 file -t bc // or -d directory instead of file
git difftool hash1 hash2 file -t bc
编辑:在git版本2.25中工作