忽略*所有*空格在提交之间使用git-diff进行更改

ico*_*ast 65 git diff git-diff

我正在通过一个代码库并修复空白怪异并且通常会修正缩进等等,我想确保我没有无意中进行任何其他更改,所以我在git diff -w显示所有已更改文件的差异而忽略空格差异.问题是,这实际上并没有忽略所有的空白差异 - 至少认为只是空白差异.例如,在以下输出中git diff -w,

-"Links":
-{
-
-    "Thermal":
-
-{
-
+  "Links": {
+    "Thermal": {
Run Code Online (Sandbox Code Playgroud)

你可以看到我只有

  1. 删除多余的空白行,
  2. 将花括号放在键打开的行的末尾,并且
  3. 缩进以适合上下文

这个问题看起来似乎可能首先提供答案,但它处理两个特定文件之间的差异,而不是两个特定提交之间的差异.通过搜索发现的其他一切也是一个死路一条.例如,这个问题是关于合并,而不是显示差异,这个问题涉及显示单词级差异,等等.

ico*_*ast 53

也许有更好的答案,但到目前为止我找到的最好的解决方案就是这个.

首先,您必须控制Git当前使用的"空白"的定义..gitconfig在项目中创建或编辑,以包含

[core]
    whitespace = -trailing-space,-indent-with-non-tab,-tab-in-indent
Run Code Online (Sandbox Code Playgroud)

接下来,您必须控制所用单词的定义.而不仅仅是使用git diff -w,添加--word-diff-regex=[^[:space:]]:

git diff -w  --word-diff-regex=[^[:space:]]
Run Code Online (Sandbox Code Playgroud)

你仍然会看到上下文(在我的情况下,因为我试图确保除了空格差异之外没有差异)没有帮助.您可以使用-U0告诉Git为您提供0行上下文,如下所示,

git diff -w -U0 --word-diff-regex=[^[:space:]]
Run Code Online (Sandbox Code Playgroud)

但是你仍然会得到看起来非常像上下文的输出,但它仍然比仔细和手动查看所有更改要好得多,以确保它们只是空白更改.

  • 人们不明白我为什么讨厌 git (3认同)
  • 是否可以删除已更改行中的“{+”、“+}”、“[-”和“-]”字符? (3认同)
  • @Torek--又一段Git善良.为什么在地狱中如此难以在没有所有空白的情况下进行差异?我在Windows机器上试图评估Visual Studio项目文件上的PR.我不关心CR,LF或CRLF的差异,但这就是Git填充我的终端的原因. (2认同)
  • @StR 你可以在 `.gitconfig` 中创建一个别名,在你的 `[alias]` 部分使用以下内容:`diffw = diff -w -U0 --word-diff-regex=[^[:space:]]` (2认同)

jww*_*jww 29

在提交之间使用git-diff 忽略所有空格更改

这个问题看起来似乎可能首先提供答案,但它处理两个特定文件之间的差异,而不是两个特定提交之间的差异.通过搜索发现的其他一切也是一个死路一条......

我认为你遇到了麻烦,因为Git是这项工作的错误工具.它不会使任务变得容易,并且屈服于适应工具是错误的方法.工具应该适合你,反之亦然.

执行第二个克隆,然后签出有问题的起始修订.然后使用当前版本对它们运行常规diff : diff -bur --ignore-all-space <dir1> <dir2>.

以下是一些选项diff

-i, --ignore-case
       ignore case differences in file contents

-E, --ignore-tab-expansion
       ignore changes due to tab expansion

-Z, --ignore-trailing-space
        ignore white space at line end

-b, --ignore-space-change
       ignore changes in the amount of white space

-w, --ignore-all-space
       ignore all white space

-B, --ignore-blank-lines
       ignore changes where lines are all blank
Run Code Online (Sandbox Code Playgroud)

  • @MortezaZiaeemehr该选项用于`diff`命令,而不是`git`命令。此答案建议使用diff工具,而不是将git用于手头的工作。 (4认同)
  • 在这种情况下,这些选项都没有帮助:diff 仍然将换行符视为与没有换行符不同。 (2认同)
  • 还存在无效选项的问题。`--ignore-all-space` 和 `--ignore-cr-at-eol` 对我有用。 (2认同)