使用 Git 忽略文件更改
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018
Visual Studio 2022 |Visual Studio 2019 |Visual Studio 2017 |Visual Studio 2015
并非项目中的每个文件都应由 Git 跟踪。 开发环境中的临时文件、测试输出和日志都是可能不需要跟踪的文件示例。 可以使用不同的机制让 Git 知道项目中不应跟踪哪些文件,并确保 Git 不会报告这些文件的更改。 对于 Git 未跟踪的文件,可以使用或.gitignoreexclude文件。 对于 Git 跟踪的文件,可以告诉 Git 停止跟踪这些文件并忽略更改。
本文介绍如何执行以下操作:
- 使用
.gitignore文件忽略对未跟踪文件的更改 - 使用
exclude文件忽略对未跟踪文件的更改 - 停止跟踪文件并使用 忽略更改
git update-index - 停止跟踪文件并使用 忽略更改
git rm
使用 gitignore 文件
可以通过添加和配置文件 .gitignore 来告知 Git 不要跟踪项目中的某些文件。 文件中的 .gitignore 条目仅适用于未跟踪的文件,并且不会阻止 Git 报告对所跟踪文件的更改。 跟踪的文件是提交并存在于最后一个 Git 快照中的文件。
文件中的每一行 .gitignore 都指定相对于 .gitignore 文件路径的文件搜索模式。 语法 .gitignore 很 灵活,支持使用通配符按名称、扩展名和路径指定单个或多个文件。 Git 将 .gitignore 搜索模式与项目中的文件匹配,以确定要忽略的文件。
通常,只需将文件 .gitignore 添加到项目的根文件夹。 但是,可以将文件 .gitignore 添加到任何项目文件夹,让 Git 知道在该文件夹及其子文件夹中忽略的任何嵌套深度的文件。 对于多个 .gitignore 文件,文件夹内文件指定的 .gitignore 文件搜索模式优先于父文件夹中文件指定的 .gitignore 模式。
可以通过从 GitHub gitignore 存储库下载.gitignore开发环境的模板来手动创建.gitignore文件并向其添加文件模式条目,或节省时间。 使用文件的好处之一 .gitignore 是可以 提交 更改并与其他人共享。
Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时维护团队资源管理器 Git 用户界面。 若要使用团队资源管理器,请从菜单栏中取消选中 ToolsOptionsPreview>>FeaturesNew>Git 用户体验。 可以从任一接口互换使用 Git 功能。 下面,我们将对如何创建和向文件添加条目 .gitignore 进行并排比较。
注意
Visual Studio创建新的 Git 存储库时,会自动为Visual Studio开发环境创建.gitignore文件。
“忽略此本地项”选项将新条目添加到.gitignore文件,并从已更改的文件列表中删除所选文件。
“忽略此扩展”选项将新条目添加到.gitignore文件,并从已更改的文件列表中删除与所选文件相同的扩展名的所有文件。
如果存储库的根文件夹中尚不存在文件,则任一选项将创建一个 .gitignore 文件,并为其添加一个条目。
编辑 gitignore 文件
文件中的每个条目 .gitignore 都是:一个文件搜索模式,用于指定要忽略的文件、以注释开头 #的注释,或用于可读性) 的空白行 (。 语法 .gitignore 很 灵活,支持使用通配符按名称、扩展名和路径指定单个或多个文件。 所有文件搜索模式路径都相对于 .gitignore 文件。
下面是常见文件搜索模式的一些示例:
# Ignore all files with the specified name.
# Scope is all repo folders.
config.json
# Ignore all files with the specified extension.
# Scope is all repo folders.
*.json
# Add an exception so as to not ignore a file with the specified name.
# Scope is all repo folders.
!package.json
# Ignore a file with the specified name.
# Scoped to the 'logs' subfolder.
/logs/test.logfile
# Ignore all files with the specified name.
# Scoped to the 'logs' subfolder and all folders beneath it.
/logs/**/test.logfile
# Ignore all files in the 'logs' subfolder.
/logs/
修改文件后 .gitignore ,Git 会立即更新它忽略的文件列表。
注意
Windows用户必须在文件中使用正斜杠路径分隔符.gitignore,而不是反斜杠。 指定文件夹时,所有用户都必须添加尾随 / 。
使用全局 gitignore 文件
可以将文件 .gitignore 指定为应用于所有本地 Git 存储库的全局忽略文件。 为此,请使用 git config 如下所示的命令:
git config core.excludesfile <gitignore file path>
全局 .gitignore 文件有助于确保 Git 不会在任何本地存储库中提交某些文件类型,例如已编译的二进制文件。 存储库特定 .gitignore 文件中的文件搜索模式优先于全局 .gitignore 文件中的模式。
使用排除文件
还可以将文件搜索模式条目添加到 exclude 本地存储库文件夹中的文件 .git/info/ 。 该文件 exclude 让 Git 知道要忽略哪些未跟踪的文件,并使用与文件相同的文件搜索模式语法 .gitignore 。
文件中的 exclude 条目仅适用于未跟踪的文件,并且不会阻止 Git 报告对已跟踪的已提交文件的更改。 每个存储库中只有一个 exclude 文件。
由于 Git 不会提交或推送 exclude 文件,因此可以安全地使用它来忽略本地系统上的文件,而不会影响其他人。
使用 Git update-index 忽略更改
有时,可以暂时停止跟踪本地存储库文件,并让 Git 忽略对文件的更改。 例如,你可能想要为开发环境自定义设置文件,而不会提交更改的风险。 为此,可以使用标志运行 git update-index 命令 skip-worktree:
git update-index --skip-worktree <file path>
若要恢复跟踪,请使用标志运行 git update-index 命令 --no-skip-worktree 。
或者,你可以暂时停止跟踪文件,并让 Git 忽略对文件的更改,方法是使用 git update-index 带有标志的 assume-unchanged 命令。 此选项比 skip-worktree标志效率低,因为 assume-unchanged 可以通过更改文件内容的 Git pull 操作还原标志。
git update-index --assume-unchanged <file path>
若要恢复跟踪,请使用标志运行 git update-index 命令 --no-assume-unchanged 。
使用 Git rm 忽略更改
或exclude文件中的.gitignore条目对 Git 已跟踪的文件没有任何影响。 Git 跟踪之前提交的文件。 若要从 Git 快照中永久删除文件,以便 Git 不再跟踪该文件,但不从文件系统中删除该文件,请运行以下命令:
git rm --cached <file path>
git commit <some message>
然后,使用 .gitignore 或 exclude 文件条目防止 Git 报告对文件的更改。

