2011-04-22 107 views

回答

2

这是一个黑客位,但你可以做到这一点

git diff banch --name-status | grep -v this/path 

不完全混帐,但做这项工作

0

你可以你不关心的路径添加到您的.gitignore文件。

编辑:您可以使用git diff files/you/care/about看你感兴趣的diff文件

例如,如果git status表明一堆文件被更改:

modified: foo/bar 
modified: foo/baz 
modified: some/more/stuff 
modified: and/some/more 

可以使用git diff foo只查看foo目录中的更改或git diff some/more/stuff and/some/more查看除foo之外的所有内容。

如果您想查看几个文件的差异,这将会很好,但如果您想要查看除之外的所有文件(如一个或两个文件),则效果不佳。我不认为有办法告诉git diff使用否定您指定的文件。

另一种方法是使用git add --interactive,但是对于你正在做的事情可能有点麻烦。

它也证明,.gitignore不会忽略已经在版本控制下的文件,所以这个想法永远不会工作。忘记我提到它。 :(

+0

我只是试图忽略可能与diff命令不同的某些文件。 – 2011-04-22 02:02:13

1

正如他们说的〜在这里:。Exclude a directory from git diff,你可以使用这样的事情:

git diff --name-only $branch_name | grep -v -E "$excluding" | xargs git diff $branch_name -- 

...其中branch_name是其他分支和excluding是你想排除的格局我不知道混帐二ff最终会提供一个类似的参数,并且我在git文档中没有找到这样的选项,所以这个命令就是我现在使用的。

唯一需要注意的是,你必须在你的工作目录的顶层(即包含您的git的文件夹相同的文件夹),此命令的工作,因为你的路径中传递给git diff --最后通过xargs与此相关。

您可以制作一个脚本,在您喜欢的外壳中为您完成工作,例如

#!/bin/zsh 

if [[ $# < 2 ]] ; then 
    echo "Usage: \n gdx [git-diff-params] branch_name extended_reg_exp\n" 
    echo "\nExamples:\n gdx development jpg \n gdx --name-only master origin/master jar \n gdx development '[a-zA-Z]+'" 
    exit 1 
fi 

excluding="[email protected][-1]" 
branch_name="[email protected][-2]" 
diff_options="[email protected][1,-3]" 

## Get a list of all the paths to include 
git_paths=$(git diff --name-only $branch_name | grep -v -E "$excluding") 

if [[ ${#git_paths} = 0 ]] ; then 
    #no diffs 
    exit 0 
else 
    ## Escape special characters 
    git_paths=(${(f)git_paths}) 
    for i in {1..${#git_paths}} 
    do 
     git_path=$git_paths[i] 
     git_path=\"${git_path//\"/\"}\" 
     git_paths[i]=$git_path 
    done 

    ## Run the diff 
    eval "git diff ${=diff_options} $branch_name -- $git_paths" 
fi 

这需要参数和打印用法和whatnot。我这样使用它:

gdx HEAD^ "*.jar"