git diff --stat排除某些文件

Mr_*_*s_D 15 git git-diff

尝试调整来自旺旺的答案以从"git diff"中排除文件以获得--stat标志并失败 - 接受的答案(创建驱动程序)似乎只是unix(重定向到/ bin/true,无论这意味着什么)加上它创建了一个驱动程序将它永久地分配给文件类型,而我正在寻找一个开关来临时禁用文件的差异(或者更确切地说是某些文件).

脚本解决方案:

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Run Code Online (Sandbox Code Playgroud)

实际上调用git状态并编辑其​​输出 - 而我想要的是指示git diff本身在计算(简单)--stat(只是更改行)时忽略一些文件.我经历了git-diff文档,但似乎无法找到这样的选项.有人帮我一把吗?

$ git --version
git version 2.6.1.windows.1
Run Code Online (Sandbox Code Playgroud)

tor*_*rek 36

制作'git log'中描述的exclude pathspec技巧忽略了某些路径的更改,在这里工作:

git diff --stat -- . ':(exclude)file/to/exclude.txt'
Run Code Online (Sandbox Code Playgroud)

或者,如果您在子目录中:

git diff --stat -- :/ ':(exclude,top)file/to/exclude.txt'
Run Code Online (Sandbox Code Playgroud)

后者可以以各种方式拼写.例如,这也有效:

git diff --stat ':(top)' :!/file/to/exclude.txt
Run Code Online (Sandbox Code Playgroud)

同样如下:

git diff --stat :/: :!/:file/to/exclude.txt
Run Code Online (Sandbox Code Playgroud)

这些在"pathspec"部分gitglossary文档中描述.请注意,排除功能是Git版本1.9中的新功能(稍微破解到1.9.2).前导/是别名,top并且!是别名exclude,其中长形式需要括号.在使用单字符别名时,实际路径名之前的尾随冒号是可选的,但在使用括号时禁止使用(此规则每次都会让我感到厌烦 - 我一直想要使用:(exclude):...而不是:(exclude)...).上面(top)(exclude)pathspec组件周围的单引号是为了保护括号不被(Unix/Linux)shell解释; Windows shell可能对哪些角色需要保护有不同的想法.

  • "未找到事件"是因为bash试图为了自己的目的而吃掉`!`.单引号或前缀反斜杠(但不是双引号)将保护shell中的`!`.请注意,shell通常也喜欢使用引号(保护其他字符),星号,问号,尖括号和方括号,以及一些shell也使用大括号.单引号是"最强大"的引号,引用除单引号之外的所有内容.双引号是"最不强大",但引用单引号.所以''!?<'"'"`通过四个字符! (2认同)