git .gitignore规则及取消追踪已追踪文件

今天,在Android studio上进行git开发,把本地的文件通过git push到远程仓库,发现很多不必要的文件也被跟踪了,导致项目非常大。上网找了一下.gitignore的规则,发现讲的都模棱两可。想想还是得靠自己,去Git官方网站看了官方文档,这里做个记录,对官方文档做一下简单的翻译。备后续查看。
官方文档链接:gitignore

gitignore

指定不需要跟踪的文件进行忽略。

概要

$HOME/.config/git/ignore, $GIT_DIR/info/exclude, .gitignore

描述

一个gitignore文件指定git需要忽略的文件。 对git已经跟踪的文件不起作用。具体查看后续NOTE。

在gitignore文件中的每一行均指定了一个模式,当决定一个文件路径是否需要忽略时,git会以以下顺序查看下列文件(优先级从高至低,在同一个优先级内,最后一个匹配的模式决定是否忽略文件)。
1. 在命令行上指定的模式。
2. 从相同目录中的.gitignore文件中读取的模式。或者上层目录中的模式(向上至目录树的顶点),但是在越低的目录级别中优先级越高(直到文件所在目录)。这些.gitignore文件对与其在相同目录中的文件有效。一个项目通常在一个仓库包含一个.gitignore文件,文件指定的模式包括项目的生成文件。
3. 从.git/ingo/exclude文件中读取的模式
4. 来自配置变量core.excludesFile指定的模式

将哪些文件放置到哪种模式中取决于取决于这个模式将被怎样使用:
1. 不应该被版本管理,也不应该被通过clone分发到其他仓库中的文件写入.gitignore文件中(比如所有人都想忽略的文件)
Patterns which should be version-controlled and distributed to other repositories via clone (i.e., files that all developers will want to ignore) should go into a .gitignore file.(这个貌似是官网写错了,应该是”should not be version-controlled”)
2. 只对一个特定的仓库有效但是没有必要与其他仓库共享(比如,只对一个用户的流程有效的辅助文件)应该写入.git/ingo/exclude中。
3. 一个用户希望Git在任何情况下都忽略的文件(比如备份或临时文件),应该添加到core.excludesFile中(用户的!/.giconfig),如果用户的$XDG_CONFIG_HOME没有被设置或者为空, $HOME/.config/git/ignore 将会生效。

模式格式
  1. 空格不匹配文件,所以可以使用空格分隔符来增加可读性
  2. #开始的行为注释,在前面添加一个\可以用来匹配一个以#开头的文件。
  3. 结尾空白会被忽略,除非使用\将空格分开
  4. !将取消一个匹配,所有在之前忽略的模式中被忽略的文件文件将被重新包括到版本控制中。如果一个文件的父目录被忽略了,不可能将该文件再添加到版本控制中。因为性能的原因,git不会列出所有的被忽略的目录,针对这些目录中的文件的模式,无论在哪个文件中被指定都无效。
    在第一个!之前添加\将会匹配以!开头的文件,比如\!important!.txt
  5. foo/将会匹配foo目录下的所有文件以及其子目录下的所有目录。通配符不会匹配pathnam/下的目录的的文件。比如Documentation/*.html 匹配 Documentation/git.html但是不匹配Documentation/ppc/ppc.htmltools/perf/Documentation/perf.html.(*不能跨目录匹配)
  6. /开头匹配当前目录,比如,匹配/*.c匹配cat-file.c但是不匹配mozilla-sha1/sha1.c.
    • **/开头表示匹配所有目录,比如,**/foo匹配所有目录下的foo文件和foo目录,和foo效果相同。**/foo/bar匹配所有在foo目录下的bar文件和bar目录。
    • 结尾的/**匹配所有目录内的文件。比如abc/**匹配所有abc目录下的文件。
    • a/**/b 匹配a/b, a/x/b, a/x/y/b and so on.
    • 其他情况下的**无效
NOTE:取消追踪一个已被追踪的文件

使用git rm --cached

github上有.gitignore的模板项目,链接如下:https://github.com/github/gitignore

<think>嗯,用户想知道如何让.gitignore忽略已经被Git跟踪文件。这个问题我之前遇到过,可能需要先理解.gitignore的作用机制。根据引用[2],.gitignore文件是用来指定哪些文件文件夹不被Git追踪的。但如果文件已经被Git跟踪了,即使后来添加到.gitignoreGit可能还是会继续追踪它们的变化。 那该怎么办呢?我记得需要先删除这些文件的缓存。引用[3]里提到,git add命令用于将文件添加到暂存区,而如果文件已经被提交过,可能需要用git rm命令来移除跟踪。但用户可能不想删除实际文件,只想让Git不再追踪。这时候应该用git rm --cached命令,这样文件会保留在工作区,但从版本控制中移除。 比如,假设要忽略所有.log文件,但已经被跟踪了,可以执行git rm --cached *.log,然后提交这个变更。之后更新.gitignore文件,添加*.log,这样以后的修改就不会被追踪了。但要注意,这样操作后,其他协作者在拉取时,他们的本地文件会被删除,所以最好在团队协作时沟通好。 另外,查看引用[4]中的例子,可能需要检查.gitignore的格式是否正确,比如是否使用了正确的通配符,或者是否有例外规则。比如!main.iml这样的例外情况,需要确认.gitignore中的模式是否覆盖了目标文件。 总结步骤应该是:1. 使用git rm --cached移除缓存中的文件;2. 提交删除操作;3. 更新.gitignore文件;4. 再次提交.gitignore。这样后续的更改就会被忽略。同时,要确保.gitignore的语法正确,避免错误排除某些文件。</think>### 如何让 `.gitignore` 忽略已被 Git 跟踪文件? #### 问题分析 Git 的 `.gitignore` 文件仅对未跟踪文件生效。如果文件已被 Git 追踪(例如已通过 `git add` 提交过),后续即使将其添加到 `.gitignore`,Git 仍会继续跟踪其变更。要解决此问题,需手动从 Git 缓存中移除已跟踪文件。 --- #### 解决方法 1. **从 Git 缓存中移除文件** 使用 `git rm --cached` 命令移除文件跟踪状态,但保留本地文件: ```bash git rm --cached <文件路径> ``` 例如,忽略已被跟踪的 `logs/` 目录: ```bash git rm --cached -r logs/ # -r 表示递归处理目录 ``` 2. **提交变更** 将移除操作提交到仓库: ```bash git commit -m "停止跟踪 logs/ 目录" ``` 3. **更新 `.gitignore` 文件** 在 `.gitignore` 中添加需要忽略规则(例如 `logs/`),然后提交修改: ```bash echo "logs/" >> .gitignore git add .gitignore git commit -m "更新.gitignore忽略logs目录" ``` --- #### 注意事项 - **影响协作**:如果其他开发者拉取此变更,他们的本地 `logs/` 目录会被删除(因为 Git 移除了跟踪)。需提前沟通或通过脚本保留本地文件[^3]。 - **通配符匹配**:确保 `.gitignore` 的规则正确。例如: - `*.log` 忽略所有 `.log` 文件; - `/build/` 仅忽略根目录下的 `build` 目录[^4]。 - **例外规则**:使用 `!` 可排除某些文件。例如忽略所有 `.class` 文件但保留 `main.class`: ``` *.class !main.class ``` --- #### 示例流程 假设已跟踪文件 `temp/data.txt`,现需忽略它: 1. 移除缓存: ```bash git rm --cached temp/data.txt ``` 2. 提交变更: ```bash git commit -m "移除对data.txt的跟踪" ``` 3. 在 `.gitignore` 中添加规则: ```bash echo "temp/data.txt" >> .gitignore git add .gitignore git commit -m "更新.gitignore" ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值