MENU

为什么我们的 .gitignore 文件屏蔽无效

December 27, 2021 • Git

1、问题背景

项目有一些开发时涉及正式、测试环境用的配置文件,需要用到所以不能删,但是却不想提交改动。

而是把它加入 .gitignore 规则中,但是我的改动还是被 git 被捕捉到了,为啥呢?

gitignore - Specifies intentionally untracked files to ignore

官方文档给出了标准答案,原来 .gitignore 只对未跟踪的文件起作用。

已跟踪的文件是指那些被纳入了版本控制的文件,在上一次提交中有它们的记录。那么未跟踪文件就是指那些从没提交过的文件。
因为我之前已经使用提交过了,所以.gitignore也救不了我。

那我想要忽略 index.scss 该怎么做?

2、解决方案
PC与 git 的对话
【PC】:我的目的是在仓库里面保留 index.scss,但是要所有人忽略它的改动,你能做到吗?

【git】:我做不到,我是个版本控制的仓库,我要为所有文件的版本负责,而不是你存储文件的中转站!但是你可以这样:

别让我管理你的 index.scss,踢出我的版本控制,存在自个儿的电脑里。
暂时只忽略你的文件改动,别人已加到版本库的文件改动,你可管不着。
让我们来看看根据 git 提供的思路,如何实践。

(1)、取消跟踪,删除远程文件(推荐)
你要做的:先将 src/index.scss 加入 .gitignore 文件。
再执行以下命令:

git rm --cached src/index.scss 
git add src/index.scss 
git commit -m "ignore index.scss"

在你的电脑进行以上操作后,index.scss 正式脱离了版本管理的管制。git rm --cached 会保留你本机的文件,但是会从版本库里面删除。

其他电脑要做的
git pull
将 index.scss 加回来
因为其他主机(您同事的电脑等等)在 git pull 你以上的改动时,index.scss 会被删除,所以 index.scss 需要加回来。

可以手动加回来,也可以使用构建工具初始化自动生成 index.scss 文件。

文章来源

Last Modified: March 21, 2023