blog.dopana

Back

您是否曾经在运行 git diff 查看最近的代码更改时,被 package-lock.jsonbun.lock 中数以千计的修改行所淹没?这就像试图在办公桌上寻找一本特定的书,却发现它被堆积如山的废纸掩盖了一样。

在这篇文章中,我们将探讨如何在比较更改时让 Git “忽略”这些文件的详细内容!

Lock 文件的问题#

当使用 npm、yarn、pnpm 或 bun 等包管理器时,它们会生成一个“lock”文件。该文件精确记录了项目依赖的所有库的版本。

[!NOTE] lock 文件的目的是确保任何克隆该项目的人都会安装完全相同的依赖项,从而避免经典的“在我的机器上可以运行”的问题。

问题在于,当您安装或更新单个库时;lock 文件可能会改变数百或数千行。当您输入 git diff 时,这些更改会淹没源代码中的实际修改,使得代码审查变得困难。

解决方案:使用 .gitattributes#

隐藏 lock 文件内容最简单有效的方法是使用 .gitattributes。此配置告诉 Git:“嘿,我知道这个文件已更改,但是请不要打印出详细的逐行比较!”。

配置 .gitattributes#

第 1 步:在项目的根目录下创建或打开 .gitattributes 文件。

第 2 步:将以下行添加到文件中:

.gitattributes
*.lock -diff
text

或者,如果您更喜欢指定确切的文件名:

.gitattributes
package-lock.json -diff
bun.lockb -diff
bun.lock -diff
composer.lock -diff
text

第 3 步:保存文件。-diff 属性指示 Git 在修改这些文件时不生成差异。

[!TIP] 当您运行 git status 时,您仍然会看到 lock 文件被列为“已修改 (modified)”,但是它们的详细内容将隐藏在 git diff 中。

通过命令行直接隐藏#

如果您不想修改 .gitattributes,可以直接在 git diff 命令中排除文件:

Terminal
git diff -- . ':(exclude)*.lock'
bash

为了避免重复输入这个长命令,您可以在 ~/.gitconfig 文件中创建一个简短的别名:

~/.gitconfig
[alias]
  d = diff -- . ':(exclude)*.lock'
ini

现在,您只需输入 git d 即可查看您的更改,而没有 lock 文件的噪音!

参考资料#