有没有办法在执行git diff时忽略路径?
例如git diff branch --name-status --ignore = this / path
答案 0 :(得分:2)
这有点像黑客,但你可以这样做。
git diff banch --name-status | grep -v this/path
不完全是git,但是能胜任。
答案 1 :(得分: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
是您要排除的模式。我不确定git-diff最终是否会提供类似的参数,我在git文档中找不到这样的选项,所以这个命令就是我现在使用的。
唯一需要注意的是您必须位于工作目录的顶层(即包含.git文件夹的同一文件夹)才能使此命令生效,因为路径是最后通过git diff --
传递到xargs
是相对于那个。{/ p>
您可以创建一个脚本,以便在您喜欢的shell中为您完成工作,例如
#!/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="$@[-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"
答案 2 :(得分:0)
您可以将您不关心的路径添加到.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
不会忽略已经受版本控制的文件,因此这个想法永远不会起作用。忘了我提到了。 :(