git diff branch --name-status --ignore



在执行git diff时是否有一种方法可以忽略路径?

例如git diff branch——name-status——ignore=this/path

这是一个hack,但你可以这样做。

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

就像他们在这里说的:从git diff中排除一个目录,你可以这样做:

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

…其中branch_name是另一个分支,excluding是你想要排除的模式。我不确定git-diff最终是否会为类似的东西提供一个参数,而且我在git文档中没有找到这样的选项,所以我现在使用这个命令。

唯一的警告是你必须在你的工作目录的顶层(即,包含你的。git文件夹的同一个文件夹),因为你在最后通过xargs传递给git diff --的路径是相对的。

你可以编写一个脚本,在你喜欢的shell中为你做这项工作,例如

#!/bin/zsh
if [[ $# < 2 ]] ; then
    echo "Usage: n   gdx [git-diff-params] branch_name extended_reg_expn"
    echo "nExamples:n   gdx development jpg n   gdx --name-only master origin/master jar n   gdx development '[a-zA-Z]+'"
    exit 1
fi
excluding="$@[-1]"
branch_name="$@[-2]"
diff_options="$@[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

接受参数并打印用法和诸如此类的东西。我是这样用的:

gdx HEAD^ "*.jar"

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

编辑:您可以使用git diff files/you/care/about查看您感兴趣的差异。

例如,如果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不会忽略已经在版本控制下的文件,所以这个想法永远不会起作用。忘了我说的吧。(

相关内容

最新更新