Git文件忽略策略详解

在使用Git进行版本控制时,经常会遇到需要忽略某些文件的情况。这些文件可能是构建过程中产生的临时文件,或者是包含敏感信息的配置文件。本文将详细介绍如何在Git中实现文件的忽略策略。

为什么需要忽略文件

忽略文件的原因主要有两个:

1. 构建过程中产生的临时文件或最终产物,这些文件不需要被Git跟踪。

2. 某些文件虽然需要被Git跟踪,但不希望提交本地的更改,例如包含数据库连接字符串的配置文件。

Git中忽略文件的四种方法

Git提供了四种方法来忽略文件

  • 使用.gitignore文件(全局忽略)
  • 使用.git/info/exclude文件(本地忽略)
  • 使用assume-unchanged命令(跟踪文件,忽略本地更改)
  • 使用skip-worktree命令(跟踪文件,忽略本地更改)

示例项目

为了演示这些方法,设置了一个小型项目。使用SourceTree这个图形界面工具来添加和提交文件。

方法A - 使用.gitignore文件

.gitignore文件的使用非常流行,这里不再赘述。这种方法适用于想要全局忽略的文件。在.gitignore文件中添加的文件会被Git在所有使用该仓库的系统上完全忽略。需要添加.gitignore文件,并将想要忽略的文件添加到该文件中,然后将其添加并提交到Git。

假设有一个名为spam1.txt的文件,不想跟踪它。SourceTree会报告它存在。需要添加.gitignore文件,并将spam1.txt添加到该文件中,然后将其添加并提交到Git。现在,SourceTree不再看到spam1.txt。它确实看到了一个额外的文件.gitignore。因此,spam1.txt文件被全局忽略。

方法B - 使用.git/info/exclude文件

需要添加.git/info/exclude文件,并将想要忽略的文件添加到该文件中。格式与.gitignore文件的格式相同。这种方法与.gitignore方法非常相似,只是.git/info/exclude文件本身不是仓库的一部分,因此其影响是局部的。这种方法适用于想要本地忽略的文件。

假设有一个名为spam2.txt的文件,不想跟踪它。SourceTree会报告它存在。需要添加.git/info/exclude文件,并将spam2.txt添加到该文件中。现在,SourceTree不再看到spam2.txt文件。因此,spam2.txt文件被本地忽略。

方法C - 使用assume-unchanged命令

assume-unchanged选项最初是作为性能辅助工具设计的,但通常在忽略文件的上下文中被提及。明确告诉Git不要检查文件是否已更改。这种方法适用于想要跟踪的文件,但希望忽略本地更改。

git update-index --assume-unchanged [...] git update-index --no-assume-unchanged [...] git ls-files -v | grep '^[[:lower:]]'

让添加config1.txt文件并将其提交到仓库。然后对文件config1.txt进行一些更改,SourceTree会报告该文件已被编辑。在命令提示符下,需要添加一个命令来假设该文件未更改。SourceTree不再报告该文件已被编辑。

方法D - 使用skip-worktree命令

skip-worktree选项被许多人推荐为忽略文件的正确方法。明确告诉Git不要检查文件是否已更改。这种方法适用于想要跟踪的文件,但希望忽略本地更改。

git update-index --skip-worktree [...] git update-index --no-skip-worktree [...] git ls-files -v | grep ^S

让添加config2.txt文件并将其提交到仓库。然后对文件config3.txt进行一些更改,SourceTree会报告该文件已被编辑。在命令提示符下,需要添加skip-worktree命令。SourceTree不再报告该文件已被编辑。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485