如何停止跟踪并忽略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

  • 链接地址: http://www.djcxy.com/p/4013.html

    上一篇: How to stop tracking and ignore changes to a file in Git?

    下一篇: How to recover a dropped stash in Git?