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