在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/