我克隆了一个包含一些.csproj
文件的项目。我不需要 / 喜欢我的本地csproj
文件被 Git 跟踪(或者在创建补丁时被启动),但显然它们在项目中是必需的。
我已将*.csproj
添加到我的 LOCAL .gitignore
,但文件已经在 repo 中。
当我输入 git status 时,它显示我对csproj
更改,我对跟踪或提交补丁不感兴趣。
如何从我的个人仓库中删除这些文件的 “跟踪”(但是将它们保存在源代码中以便我可以使用它们)以便在我执行状态(或创建补丁)时看不到更改?
是否有正确 / 规范的方法来处理这种情况?
只是在要从修订控件中删除的每个文件上调用git rm --cached
应该没问题。只要您的本地忽略模式正确,您就不会在 git status 的输出中看到这些文件。
请注意,此解决方案会从存储库中删除文件,因此所有开发人员都需要维护自己的本地(非版本控制)文件副本
要防止 git 检测到这些文件中的更改,您还应该使用以下命令:
git update-index --assume-unchanged [path]
你可能想做什么:(来自@Ryan Taylor 的答案 )
- 这是告诉 git 你想要自己的文件或文件夹的独立版本。例如,您不想覆盖(或删除)生产 / 暂存配置文件。
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