使用 Git 忽略文件更改

Azure DevOps Services |Azure DevOps Server |Azure DevOps Server 2022 |Azure DevOps Server 2020

Visual Studio 2019 |Visual Studio 2022

项目中的每个文件都不需要通过 Git 进行跟踪。 通常不需要跟踪的文件示例包括开发环境中的临时文件、测试输出和日志。

可以使用多种机制通知 Git 不应跟踪项目中的文件,并确保 Git 不会报告这些文件的更改。 对于 Git 未跟踪的文件,可以使用或.gitignoreexclude文件。 对于 Git 已跟踪的文件,可以指示 Git 停止跟踪它们并忽略任何更改。

先决条件

类别 要求
项目访问权限 项目的成员。
权限 - 查看专用项目中的代码:至少 是基本 访问权限。
- 克隆或参与专用项目中的代码: 参与者 安全组的成员或项目中的相应权限。
- 设置分支或存储库权限: 管理 分支或存储库的权限。
- 更改默认分支: 编辑存储库的策略 权限。
- 导入存储库: 项目管理员 安全组的成员或 Git 项目级 “创建存储库 ”权限设置为 “允许”。 有关详细信息,请参阅 “设置 Git 存储库权限”。
Services 已启用存储库
工具 可选。 使用 az repos 命令: Azure DevOps CLI

注释

在公共项目中,具有 利益干系人 访问权限的用户具有对 Azure Repos 的完全访问权限,包括查看、克隆和参与代码。

类别 要求
项目访问权限 项目的成员。
权限 - 查看代码:至少 基本 访问权限。
- 克隆或参与代码: 参与者 安全组的成员或项目中的相应权限。
Services 已启用存储库

使用 .gitignore 文件

可以通过添加和配置 .gitignore 文件,告知 Git 不要跟踪项目中的某些文件。 查看以下要点:

  • 未跟踪的文件:文件中的条目 .gitignore 仅适用于未跟踪的文件。 它们不会阻止 Git 报告对已跟踪文件的更改。 跟踪的文件是提交并存在于最后一个 Git 快照中的文件。
  • 文件搜索模式:文件中的每一行 .gitignore 都指定相对于 .gitignore 文件路径的文件搜索模式。 .gitignore 语法很灵活,支持使用通配符按名称、扩展名和路径指定单个或多个文件。 Git 将 .gitignore 搜索模式与项目中的文件匹配,以确定要忽略的文件。
  • 位置:通常,将文件 .gitignore 添加到项目的根文件夹。 但是,可以将文件添加到 .gitignore 任何项目文件夹,让 Git 知道该文件夹中要忽略的文件及其子文件夹中的任何嵌套深度。 对于多个 .gitignore 文件,文件在文件夹中指定的文件搜索模式 .gitignore 优先于文件在父文件夹中指定的模式 .gitignore
  • 创建:可以手动创建 .gitignore 文件并向其添加文件模式条目。 或者,可以通过从 GitHub .gitignore下载开发环境的模板来节省时间。
  • 优点:使用文件的好处之一 .gitignore 是可以 提交 更改并将其与他人共享。

注释

创建 .gitignore时,Visual Studio 会自动为 Visual Studio 开发环境创建文件。

Visual Studio 2022 通过解决方案资源管理器中的 Git 菜单、Git 更改和快捷菜单提供 Git 版本控制体验。 Visual Studio 2019 版本 16.8 还提供 团队资源管理器 Git 用户界面。 有关详细信息,请参阅 Visual Studio 2019 - 团队资源管理器 选项卡。

“Git 更改 ”窗口中,右键单击希望 Git 忽略的任何已更改文件,然后选择“ 忽略此本地项 ”或 “忽略此扩展”。 跟踪的文件不存在这些菜单选项。

Visual Studio 中“Git 更改”窗口中已更改文件的上下文菜单选项的屏幕截图。

  • “忽略此本地项”选项将新条目添加到.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 to prevent ignoring 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 标志,因为更改文件内容的 Git pull 作可以还原 assume-unchanged 标志。

git update-index --assume-unchanged <file path>

若要恢复跟踪,请使用 git update-index 标志运行命令 --no-assume-unchanged

使用 git rm 忽略更改

某个或.gitignore文件中的条目exclude对 Git 已跟踪的文件没有影响。 Git 跟踪以前提交的文件。 若要从 Git 快照中永久删除文件,以便 Git 不再跟踪它,但不从文件系统中删除该文件,请运行以下命令:

git rm --cached <file path>
git commit <some message>

然后,使用或.gitignoreexclude文件条目防止 Git 报告对文件的更改。

后续步骤