在Git中停止跟踪并忽略文件更改的方法
在Git中停止跟踪并忽略文件更改的方法
技术背景
在使用Git进行版本控制时,有时我们不希望某些文件被纳入版本控制,或者不希望Git检测到这些文件的更改。例如,配置文件包含敏感信息,不同开发环境下的配置不同,我们不希望这些配置文件的更改被提交到远程仓库。此时,就需要掌握在Git中停止跟踪并忽略文件更改的方法。
实现步骤
方法一:使用git rm --cached
此方法会将文件从版本控制中移除,但保留本地文件。
- 对于单个文件,使用
git rm --cached <file-name>
;对于文件夹,使用git rm -r --cached <folder-name>
。 - 执行完上述命令后,这些文件在
git status
中会显示为未跟踪文件。 - 若要将这些文件彻底忽略,可将其添加到
.gitignore
文件中。
方法二:使用git update-index --assume-unchanged
该方法用于告诉Git假设文件不会被更改,可优化性能,适用于大型文件夹或不太可能更改的文件。
- 执行
git update-index --assume-unchanged <path-name>
,Git将停止自动检查该文件的更改。 - 若要恢复跟踪,使用
git update-index --no-assume-unchanged <path-name>
。
方法三:使用git update-index --skip-worktree
此方法用于告诉Git你想要文件或文件夹的独立版本,不会覆盖或删除生产/暂存配置文件。
- 执行
git update-index --skip-worktree <path-name>
。 - 若要恢复跟踪,使用
git update-index --no-skip-worktree <path-name>
。
应用.gitignore
到当前或未来项目
- 提交最新的
.gitignore
文件:
1 |
|
- 对当前索引应用标准的Git忽略行为:
1 |
|
- 可选步骤:将之前被忽略但现在不应被忽略的文件添加到索引中:
1 |
|
- 再次提交:
1 |
|
核心代码
移除文件跟踪并添加到.gitignore
1 |
|
假设文件不变
1 |
|
跳过工作树
1 |
|
最佳实践
- 对于不太可能更改的文件或文件夹,如SDK,使用
git update-index --assume-unchanged
。 - 对于包含敏感信息或不同环境配置不同的文件,使用
git update-index --skip-worktree
。 - 确保
.gitignore
文件正确配置,避免不必要的文件被跟踪。
常见问题
执行git update-index --assume-unchanged
后,拉取上游更改时文件被覆盖
这是因为--assume-unchanged
假设文件不会更改,当有上游更改时,索引会被重置,文件会被覆盖。此时可使用git update-index --no-assume-unchanged
恢复跟踪,解决冲突后再重新设置。
.gitignore
不生效
可能是操作顺序问题,应先执行git rm --cached xxx
,再修改.gitignore
文件。另外,确保.git/info/exclude
和.gitignore
文件存在且配置正确。
在Git中停止跟踪并忽略文件更改的方法
https://119291.xyz/posts/git-stop-tracking-and-ignore-file-changes/