如何停止跟踪并忽略Git中文件的更改?
我克隆了一个包含一些.csproj
文件的项目。 我不需要/喜欢我的本地csproj
文件被Git跟踪(或者在创建补丁时被调出),但显然它们在项目中是必需的。
我已将*.csproj
添加到我的本地.gitignore
,但这些文件已存在于回购站中。
当我输入git status时,它会显示我对csproj
更改,而我不希望跟踪或提交补丁程序。
如何从我的个人回购中删除这些文件的“跟踪”(但将它们保存在源代码中以便我可以使用它们),以便在执行状态(或创建修补程序)时看不到更改?
有没有一种正确的/规范的方式来处理这种情况?
只要调用你想从版本控制中删除的每个文件上的git rm --cached
就可以。 只要你的本地忽略模式是正确的,你就不会在git status的输出中看到这些文件。
请注意,此解决方案从存储库中删除文件,因此所有开发人员都需要维护自己的本地(非版本控制)文件副本
为防止git检测这些文件中的更改,您还应该使用以下命令:
git update-index --assume-unchanged [path]
你可能想要做的是:(从下面的@瑞安泰勒回答)
git update-index --skip-worktree <path-name>
完整的答案在这个URL中:http://source.kohlerville.com/2009/02/untrack-files-in-git/
如果你使用git update-index --assume-unchanged file.csproj
,git将不会自动检查file.csproj是否有变化:只要你改变它们就会阻止它们进入git状态。 所以你可以用这种方式标记所有的.csproj文件 - 尽管你必须手动标记上游回购给你发送的新文件。 (如果你的.gitignore
或.git/info/exclude
有他们,那么你创建的将被忽略)
我不完全确定.csproj文件是什么......如果它们是沿着IDE配置行的东西(类似于Eclipse的.eclipse和.classpath文件),那么我建议他们应该根本不用源代码控制所有。 另一方面,如果他们是构建系统的一部分(比如Makefiles),那么显然他们应该 - 以及选择可选的本地更改(例如从local.csproj a la config.mk)的方法将是有用的:将构建分为全球部分和本地覆盖。
这是一个两步过程:
删除文件/文件夹的跟踪 - 但保留在磁盘上 - 使用
git rm --cached
现在他们没有显示为“改变”,但仍显示为
untracked files in git status -u
将它们添加到.gitignore
上一篇: How to stop tracking and ignore changes to a file in Git?