我克隆了一个包含一些.csproj文件的项目。我不需要/喜欢我的本地csproj文件被 Git 跟踪(或在创建补丁时被调出),但显然项目中需要它们。
.csproj
csproj
我已添加*.csproj到我的 LOCAL.gitignore中,但文件已经在 repo 中。
*.csproj
.gitignore
当我输入 git status 时,它会显示我csproj对跟踪或提交补丁不感兴趣的更改。
如何从我的个人存储库中删除这些文件的“跟踪”(但将它们保留在源中以便我可以使用它们),以便在我执行状态(或创建补丁)时看不到更改?
是否有正确/规范的方法来处理这种情况?
只需调用git rm --cached要从修订控制中删除的每个文件就可以了。只要您的本地忽略模式是正确的,您就不会在 git status 的输出中看到这些文件。
git rm --cached
请注意,此解决方案会从存储库中删除文件,因此所有开发人员都需要维护自己的本地(非修订控制)文件副本
为了防止 git 检测到这些文件中的更改,您还应该使用以下命令:
git update-index --assume-unchanged [path]
**您可能想要做什么:
这是告诉 git 你想要你自己的独立版本的文件或文件夹。例如,您不想覆盖(或删除)生产/暂存配置文件。 git update-index --skip-worktree <path-name>
git update-index --skip-worktree <path-name>
今天我学习了如何取消跟踪已经添加到 git 存储库的文件。以下命令将停止跟踪,但保持文件完好无损。这对于经常自动生成文件的目录很有用,因此每次执行 git 提交时,您都不必提交这些文件的新副本。
git rm --cached filename
rm 让我感到紧张,因为我不想意外删除我的文件(在我做之前做了备份)。好在一切都解决了,现在 git 不必进行任何不必要的跟踪。
== 更新 ==
您可以使用 .gitignore作为下一步。
==更新 ==
似乎比 rm -cached 在协作环境中更好的解决方案。我的用例一直在自己处理我自己的东西,所以我不能反对这一点。这对我来说是一个新命令,所以我在测试存储库中搞砸了一点,并注意到了一些差异:
git update-index --no-assume-unchanged filename
您的里程可能会有所不同,但我想我将来会开始使用 git update-index –assume-unchanged。感谢所有的评论和帮助。