为什么说.gitignore不能忽视

本文介绍了如何利用.gitignore文件排除不必要的文件,从而保持代码库的整洁性和控制其大小。文章详细解释了.gitignore文件的工作原理,包括模式匹配规则及本地与全局文件的区别。
导读我注意到很多开发者没有使用 .gitignore 文件,尽管使用 .gitignore 文件来指定你不希望 Git 在版本控制中跟踪的文件是最佳实践之一。.gitignore 可以提高代码质量,所以你不应该忽略版本库中的 .gitignore。

为什么说.gitignore不能忽视为什么说.gitignore不能忽视

什么是 .gitignore?

Git 仓库中的文件可以是:

  • 未跟踪的:未被暂存或提交的变更。
  • 跟踪的:已暂存或提交的变更。
  • 忽略的:你让 Git 忽略的文件。

有些文件你希望 Git 忽略,不要在你的版本库中跟踪它,这些文件包括许多自动生成的或特定于平台的文件,以及其他本地配置文件,如:

  • 含有敏感信息的文件
  • 编译出的代码,如 .dll 或 .class。
  • 系统文件,如 .DS_Store 或 Thumbs.db。
  • 含有临时信息的文件,如日志、缓存等。
  • 生成的文件,如 dist 文件夹。

如果你不想让 Git 跟踪版本库中的某些文件,不过这不能通过 Git 命令做到。(虽然你可以用 git rm 命令停止跟踪一个文件,比如 git rm --cached。)相反,你需要使用 .gitignore 文件,这是一个告诉 Git 不要跟踪哪些文件的文本文件。

创建 .gitignore 文件很简单,只需创建一个文本文件并命名为 .gitignore。记得在文件名的开头有一个点(.)。就这样就完成了。

编写 .gitignore 文件的规则

根据文档,“.gitignore 文件中的每一行都指定了一个模式。”

在此上下文中,“模式”可以指一个特定的文件名,或者指文件名的某些部分结合上通配符。换句话说,example.txt 是匹配名为 example.txt 的文件的有效模式,而 ex*txt 是匹配名为 example.txt 以及 export.txt 的文件的有效模式。

以下是一些帮助你正确设置 .gitignore 文件的基本规则:

  • 任何以哈希(#)开头的行都是注释。
  • \ 字符可以转义特殊字符。
  • / 字符表示该规则只适用于位于同一文件夹中的文件和文件夹。
  • 星号(*)表示任意数量的字符(零个或更多)。
  • 两个星号(**)表示任意数量的子目录。
  • 一个问号(?)代替零个或一个字符。
  • 一个感叹号(!)会反转特定的规则(即包括了任何被前一个模式排除的文件)。
  • 空行会被忽略,所以你可以用它们来增加空间,使你的文件更容易阅读。
  • 在末尾添加 / 会忽略整个目录路径。

本地与全局 .gitignore 文件的比较

有两种类型的 .gitignore 文件:

  • 本地:放在 Git 仓库的根目录下,只在该仓库中工作,并且必须提交到该仓库中。
  • 全局:放在你的主目录根目录下,影响你在你的机器上使用的每个仓库,不需要提交。

很多开发者在项目仓库中使用本地的 .gitignore 文件,但很少有人使用全局的 .gitignore 文件。使用全局文件最显著的优势是,你不需要提交就可以使用它,而且做一个改动会影响你所有的版本库。

Git 忽略的优势

除了确保特定的文件不被 Git 追踪之外,使用 .gitignore 文件还有其他好处。

  • 通过忽略不需要的文件,它可以帮助你保持代码库的干净。
  • 它可以控制代码库的大小,这在你正在做一个大项目的时候特别有用。
  • 你的每一次提交、推送和拉取请求都将是干净的。

结束语

Git 很强大,但归根结底,它只是一个计算机程序而已。使用最佳实践并保持你的代码仓库稳定是一个团队的努力,其中要做到一件事就是使用 .gitignore 文件。Linux就该这么学

### 解析 .gitignore 文件配置后仍被跟踪的原因 当文件已经在 Git 的索引中时,即便后续将其路径添加至 `.gitignore` 文件内,Git 依旧会持续跟踪该文件的变化情况[^3]。 对于已经存在于版本库中的文件而言,`.gitignore` 并不会对其产生影响。这是因为一旦文件被加入到仓库的历史记录里,Git 默认认为开发者希望保留对该文件变更历史的追踪能力,因此忽略了 `.gitignore` 中的相关设置[^2]。 ### 实施解决方案 为了使 `.gitignore` 对现有文件生效并停止其被进一步跟踪,可以采取如下措施: 移除文件的索引条目而不删除实际文件本身: ```bash git rm --cached <file> ``` 提交此次变动以更新项目历史: ```bash git commit -m "Stop tracking <file>" ``` 上述命令执行完毕之后,虽然本地磁盘上的文件依然存在,但是 Git 不再对其进行任何改动监控;同时,在未来的推送操作中也不会携带这个文件的数据变化信息。 另外一种方式是批量处理多个不需要跟踪的文件,可以通过编辑器打开 `.git/info/exclude` 或者全局排除模式来实现相同的效果,不过最推荐的做法仍然是通过 `rm --cached` 来单独处理每一个特定的目标文件[^4]。 ### 自动化清理所有受忽略规则约束但仍处于工作树下的文件 如果面临大量此类文件需要一次性解决,则可利用以下脚本完成自动化清理过程: ```bash #!/bin/bash # 获取所有应被忽略却仍在索引内的文件列表,并逐个取消缓存 files=$(git ls-files -i -c --exclude-standard) for file in $files; do git rm --cached "$file" done # 提交这次大规模调整动作 git commit -am 'Remove ignored files from version control' ``` 这段 Shell 脚本能够遍历整个项目目录结构,找出那些按照当前 `.gitignore` 设置应该被忽视但实际上还在被跟踪的状态下的文件们,进而统一解除它们与 Git 版本控制系统之间的关联关系[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值