想要从”git diff”中排除文件 

from–https://qa.1r1g.com/sf/ask/729057031/

 

我试图db/irrelevant.php从Git diff中排除一个文件().我试图把在一个文件db名为的子目录.gitattributes与行irrelevant.php -diff ,我也尝试创建一个名为.git/info/attributes包含db/irrelevant.php.

在所有情况下,该db/irrelevant.php文件都作为Git二进制补丁包含在diff中.我想要的是diff命令忽略对该文件的更改.我究竟做错了什么?

 

Mr_*_*s_D  283

 

Omg,驱动程序和awk排除一个糟糕的文件?从git 1.9开始,您可以:

git diff -- . ':(exclude)db/irrelevant.php' ':(exclude)db/irrelevant2.php'

Run Code Online (Sandbox Code Playgroud)啊,优雅!请参阅@torek 的引用答案和详细解答

 

  • 排除更多文件,例如我有*.min.css和*.min.js文件以避免git diff.所以,我使用命令`git diff – .’:(排除)*.min.js”:(排除)*.min.css’` (6认同)
  • **windows语法**:`git diff – .”:(排除)db/irrelevant.php”`(双引号而不是单引号) (4认同)
  • 谢谢!如此深奥的语法..我每次都要查一下。 (3认同)
  • `git diff — 。’:(exclude)package-lock.json’` – 对于(可能)非常常见的情况,这里是复制粘贴的命令行。 (3认同)
  • 注意:如果要排除特定的文件名,则必须以星号作为前缀,这与`.gitignore`文件语法不同。例如`:!* shrinkwrap.yaml`代替`:!shrinkwrap.yaml`。 (2认同)
  • @cnlevy 或没有引号!`git diff — 。:(排除)db/irrelevant.php` (2认同)
  • 是否可以添加这个 co .gitconfig 文件,以便 `git diff` 在默认情况下始终使用它运行? (2认同)

Kur*_*tal  61

 

您可以使用no op命令设置自定义diff驱动程序,并将其分配给应忽略的文件.

使用此命令创建特定于存储库的diff驱动程序

git config diff.nodiff.command /bin/true

Run Code Online (Sandbox Code Playgroud)或者你的所有回购--global.

(如果/bin/true在MacOS中不存在,替代品将使用/usr/bin/trueecho).

然后,将新的diff驱动程序分配给您要.git/info/attributes文件中忽略的文件.

irrelevant.php    diff=nodiff

Run Code Online (Sandbox Code Playgroud)如果这个状态应该与其他开发人员共享,那么你可以使用.gitattributes而不是与同伴.git/info/attributes共享git config命令(通过文档文件或其他东西).

 

  • 这个答案对我来说效果更好:http://stackoverflow.com/questions/1016798/excluding-files-from-git-diff (11认同)
  • 有趣的是,这种方法不适用于`git diff –stat`.在这种情况下,可以使用`git diff … | diffstat`作为解决方法. (3认同)
  • 只是一个补充:如果你想强制git diff显示它,使用`–no-ext-diff` (3认同)
  • 这正是我所寻找的 – 正如http://kerneltrap.org/mailarchive/git/2008/10/17/3711254所述我编辑了〜/ .gitconfig添加:`“command =/bin/true`然后我创建了一个名为.git/info/attributes的文件,我添加了:`irrelevant.php diff = nodiff` (2认同)

Szi*_*fer  34

 

您还可以使用patchutils程序集的filterdiff程序来排除diff的某些部分.例如:

git diff | filterdiff -p 1 -x db/irrelevant.php

Run Code Online (Sandbox Code Playgroud) 

  • 请注意,manpage(1)中的`-p`是”-pn,–strip-match = n匹配时,忽略路径名的前n个组件.” 我花了一段时间才发现`-p 1`正在从OP的路径中删除`db`部分.如果您只想指定文件名并忽略所有路径/目录的可能性,可以使用`-p 99`. (4认同)

dls*_*sso  33

 

最简单的答案

git diff ':!db/irrelevant.php'

它就':!<path to file>'在您的 diff 命令之后。diff 命令可以像您喜欢的那样复杂,如果需要,您可以使用通配符*.min.js或添加多个排除(空格分隔带引号的块)。

 

  • 简短明确的答案。谢谢! (3认同)
  • 谢谢!也适用于`git log -p`。如:`git log -p’:!package-lock.json’` (2认同)

Chi*_*nke  25

 

此方法比接受的答案短.

git diff 987200fbfb 878cee40ba --stat -- ':!*.cs'

Run Code Online (Sandbox Code Playgroud)有关不同包含/排除可能性的更多信息,请阅读其他帖子

 

  • 我会删除 –stat 部分,或者至少解释它的作用,因为其他答案都不包括它。 (6认同)
  • 好的,我看到 “`git diff — ‘:!*.cs’ ‘:!*.js’ “` 谢谢 (2认同)

Ben*_*oux  17

 

这个单行解决方案不需要其他工具/下载:

git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`

Run Code Online (Sandbox Code Playgroud)file/to/exclude.txt当然,您要排除的文件名称在哪里.

编辑:信用ksenzee修复已删除的文件打破差异.

 


jas*_*ard  11

 

相对于git根目录

git diff 接受一个可选的排除

git diff -- ":(exclude)thingToExclude"

Run Code Online (Sandbox Code Playgroud)

您可能想要添加一些通配符

git diff -- ":(exclude)*/thingToExclude/*"

Run Code Online (Sandbox Code Playgroud)

定位特定文件类型

git diff -- ":(exclude)*/$1/*.png"

Run Code Online (Sandbox Code Playgroud)

或者为您的 dotfiles 删除一个小脚本

比如.bash_profile.zshrc

gde() {
    # git diff exclude files or folders 
    # usage: 
    # gde fileOrFolderNameToExclude
    git diff -- ":(exclude)*/$1/*"
}

Run Code Online (Sandbox Code Playgroud) 


use*_*608  10

 

KurzedMetal真的很好的回答我需要做什么,这是能够看到文件已经改变,但不能生成差异,这在我的情况下可能是巨大的.

但我的一位同事提出的方法更为简单,对我有用:

.gitattributes在要忽略的文件所在的目录中添加文件,其中git diff包含以下内容:

file-not-to-diff.bin -diff

仍然可以git status“查看”文件是否更改.git diff还会”看到”文件发生了变化,但它不会生成diff.

.bin扩展了该示例中的文件是经过深思熟虑的.我确实知道这是二进制文件的git的默认行为,它不需要特殊处理.gitattributes.但在我的情况下,这些文件被git和”file”实用程序识别为文本文件,这就是诀窍.

 

  • 这应该是公认的答案。 (3认同)
  • 是的!这很整洁,它不会隐藏任何更改,但不会向您显示丑陋的 `*.min.js` 文件等。这很好,最好的答案恕我直言。 (2认同)
  • 它确实应该:没有人希望每次“git diff”时都必须输入一堆参数。此解决方案可让您修复一次并永远忘记该问题。 (2认同)

Car*_*l G  5

 

基于现有答案,如果您想排除文件模式,无论它在目录中的哪个位置,请使用相应的git pathspec**

git diff -- ':!**/yarn.lock'

Run Code Online (Sandbox Code Playgroud) 

上一篇
下一篇