如何在Git中停止跟踪和忽略对文件的更改?
如何在Git中停止跟踪和忽略对文件的更改?
我克隆了一个包含一些.csproj
文件的项目。我不需要/不喜欢我的本地csproj
文件被Git跟踪(或在创建补丁时被提出),但这些文件显然是在项目中需要的。
我已经在我的本地.gitignore
文件中添加了*.csproj
,但这些文件已经在存储库中。
当我输入git status时,它显示我对csproj
的更改,但我不感兴趣跟踪或提交这些更改以供补丁。
如何将这些文件的“跟踪”从我的个人存储库中删除(但保留它们在源代码中,以便我可以使用它们),这样我在进行状态(或创建补丁)时不会看到这些更改?
是否有正确/规范的方法来处理这种情况?
有三个选项;你可能想选择第三个
-
这个选项会为你保留本地文件,但是在别人 pull 代码时会删除文件。
git rm --cached <文件名>
或git rm -r --cached <文件夹名>
-
这个选项用于优化,比如一个拥有大量文件的文件夹,例如 SDK。这告诉 Git 在本地不再检查这个巨大的文件夹是否有变化,因为它不会有任何变化。如果文件/文件夹有更新,
assume-unchanged
索引会被重置并被文件覆盖(当你 pull 代码时)。git update-index --assume-unchanged
-
这个选项告诉 Git 你想保留自己独立版本的文件或文件夹。例如,你不想覆盖(或删除)生产/暂存配置文件。
git update-index --skip-worktree
重要的是要知道,
git update-index
不会被 Git 自动推送,所以每个用户都必须独立运行它。
只需在你想要从版本控制中删除的每个文件上调用git rm --cached
,就应该没问题了。只要本地的忽略模式是正确的,你就不会在git status的输出中看到这些文件。
请注意,此解决方案会从仓库中删除文件,因此所有开发人员都需要维护自己本地的(非版本控制的)文件副本。
为了防止git检测到这些文件的更改,你还应该使用以下命令:
git update-index --assume-unchanged [path]
你可能想要做的事情:(来自下面Ryan Taylor的答案)
- 这是告诉git你想要自己独立的文件或文件夹版本。例如,你不想覆盖(或删除)生产/暂存配置文件。
git update-index --skip-worktree
完整的答案在这个URL中:http://source.kohlerville.com/2009/02/untrack-files-in-git/