Azure DevOps Services |Azure DevOps Server 2022 - Azure DevOps Server 2019 |TFS 2018

Visual Studio 2019 |Visual Studio 2022

并非项目中的每个文件都应由 Git 跟踪。 开发环境中的临时文件、测试输出和日志都是可能不需要跟踪的文件示例。 可以使用不同的机制让 Git 知道项目中不应跟踪哪些文件,并确保 Git 不会报告这些文件的更改。 对于 Git 未跟踪的文件,可以使用或 .gitignore exclude 文件。 对于 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 模式。

    你可以手动创建文件 .gitignore 并向其添加文件模式条目,或者通过从 GitHub gitignore 存储库下载 .gitignore 开发环境的模板来节省时间。 使用文件的好处之一 .gitignore 是可以 提交 更改并与其他人共享。

    创建新的 Git 存储库 时,Visual Studio 会自动为 Visual Studio 开发环境创建 .gitignore 文件。

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

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

    Visual Studio 2019 版本 16.8 及更高版本提供 Git 版本控制体验,同时维护 团队资源管理器 Git 用户界面。 若要使用 团队资源管理器 ,请从菜单栏中取消选中 “工具 > 选项 > 预览功能 ”新增 > Git 用户体验。 可以从任一接口互换使用 Git 功能。

    团队资源管理器 “更改 ”视图中,右键单击希望 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 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>
    

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

    查看历史记录

  • Git 存储库的新增功能? 了解更多
  • 使用提交保存工作
  •