如何停止跟踪并忽略Git中文件的更改?

我克隆了一个包含一些.csproj文件的项目。 我不需要/像我的本地csproj文件被Git跟踪(或者在创build补丁时被调出),但显然在项目中需要它们。

我已经添加*.csproj到我的本地.gitignore ,但文件已经在回购。

当我inputgit status的时候,它会显示我对csproj更改,而我不希望跟踪或提交补丁程序。

如何从我的个人回购中删除这些文件的“跟踪”(但将它们保存在源代码中以便我可以使用它们),以便在执行状态(或创build修补程序)时看不到更改?

有没有正确的/规范的方式来处理这种情况?

只要调用你想从版本控制中删除的每个文件上的git rm --cached就可以。 只要你的本地忽略模式是正确的,你将不会看到这些文件包含在输出的git状态。

请注意,此解决scheme从存储库中删除文件,因此所有开发人员都需要维护自己的本地(非版本控制)文件副本

为了防止git检测这些文件的变化,你也应该使用这个命令:

 git update-index --assume-unchanged [path] 

你可能想要做什么:(从下面@瑞安泰勒回答 )

  1. 这是告诉你想要你自己的独立版本的文件或文件夹。 例如,您不想覆盖(或删除)生产/登台configuration文件。

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状态时,git会停止它们。 所以你可以用这种方式标记所有的.csproj文件 – 尽pipe你必须手动标记上游回购给你发送的新文件。 (如果你在.gitignore.git/info/exclude有他们,那么你创build的将被忽略)

我不完全确定什么.csproj文件是…如果他们沿着IDEconfiguration(类似于Eclipse的.eclipse和.classpath文件)的东西,那么我build议他们应该从来没有源控制在所有。 另一方面,如果他们是构build系统的一部分(比如Makefiles),那么显然他们应该 – 以及select可选的本地更改(例如从local.csproj a la config.mk)的方法将是有用的:把build筑物分成全球部分和地方覆盖。

这是一个两步过程:

  1. 删除文件/文件夹的跟踪 – 但保留在磁盘上 – 使用

     git rm --cached 

    现在他们不显示为“改变”,但仍显示为

      untracked files in git status -u 
  2. 将它们添加到.gitignore

接受的答案仍然没有为我工作

我用了

git rm -r –cached。

git add。

git commit -m“修复.gitignore”

从这里find答案

有3个选项,你可能想#3

1.这将为你保留本地文件,但是当他们拉的时候会将其删除。

git rm --cached <file-name>或者git rm -r --cached <folder-name>

2.这是为了优化,就像一个包含大量文件的文件夹,例如可能永远不会改变的SDK。 它告诉git停止检查那个巨大的文件夹每次更改,因为它不会有任何。

 git update-index --assume-unchanged <path-name> 

3.这是告诉你想要你自己的独立版本的文件或文件夹。 例如,您不想覆盖(或删除)生产/登台configuration文件。

 git update-index --skip-worktree <path-name> 

知道git update-index 不会用git 传播很重要,每个用户都必须独立运行它。

忘了你的.gitignore?

如果你有整个项目在本地,但忘了添加你git忽略,现在正在跟踪一些不必要的文件使用此命令来删除一切

 git rm --cached -r . 

确保你是项目的根源。

那你可以照常做

 git add . 

承诺

 git commit -m 'removed all and added with git ignore' 

 git push origin master 

结论

希望这有助于那些不得不改变他们的.gitignore或忘记在一起的人。

  • 它将删除整个caching
  • 看你的.gitignore
  • 添加要跟踪的文件
  • 推到你的回购

为了节省一些时间,您添加到.gitignore的规则可以用于删除多个文件/文件夹,即

git rm --cached app/**/*.xml

要么

git rm --cached -r app/widgets/yourfolder/

等等

正如在其他答案中指出的那样,select的答案是错误的。

另一个问题的答案表明,这可能是需要跳过工作树。

 git update-index --skip-worktree <file> 

我假设你问如何删除特定文件夹或bin文件夹中的所有文件,而不是单独select每个文件。

你可以使用这个命令:

git rm -r -f /<floder-name>\*

确保您位于该目录的父目录中。
该命令将recursion地“删除”bin /或build /文件夹中的所有文件。 通过删除这个词我的意思是git会假装这些文件被“删除”,这些文件将不会被跟踪。 git确实将这些文件标记为删除模式。

确保你有你的.gitignore准备好即将到来的提交。
文档:git rm

问题可能是由操作顺序造成的。 如果你先修改了.gitignore,然后git rm –cached xxx,那么你可能还要继续遇到这个问题。

正确的解决scheme:

  1. git rm –cached xxx
  2. 修改.gitignore

订单不变!

.gitignore修改后重新加载!

我假设你正试图从git中删除一个单一的文件。 为此,我会build议下面的命令。

git update-index –assume-unchanged

例如 – git update-index –assume-unchanged .gitignore .idea / compiler.xml

防止通过git监视文件

 git update-index --assume-unchanged [file-path] 

并将其恢复使用

 git update-index --no-assume-unchanged [file-path]