如何停止跟踪并忽略Git中文件的更改?
我克隆了一个包含一些.csproj
文件的项目。 我不需要/像我的本地csproj
文件被Git跟踪(或者在创build补丁时被调出),但显然在项目中需要它们。
我已经添加*.csproj
到我的本地.gitignore
,但文件已经在回购。
当我inputgit status的时候,它会显示我对csproj
更改,而我不希望跟踪或提交补丁程序。
如何从我的个人回购中删除这些文件的“跟踪”(但将它们保存在源代码中以便我可以使用它们),以便在执行状态(或创build修补程序)时看不到更改?
有没有正确的/规范的方式来处理这种情况?
只要调用你想从版本控制中删除的每个文件上的git rm --cached
就可以。 只要你的本地忽略模式是正确的,你将不会看到这些文件包含在输出的git状态。
请注意,此解决scheme从存储库中删除文件,因此所有开发人员都需要维护自己的本地(非版本控制)文件副本
为了防止git检测这些文件的变化,你也应该使用这个命令:
git update-index --assume-unchanged [path]
你可能想要做什么:(从下面@瑞安泰勒回答 )
- 这是告诉你想要你自己的独立版本的文件或文件夹。 例如,您不想覆盖(或删除)生产/登台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筑物分成全球部分和地方覆盖。
这是一个两步过程:
-
删除文件/文件夹的跟踪 – 但保留在磁盘上 – 使用
git rm --cached
现在他们不显示为“改变”,但仍显示为
untracked files in git status -u
-
将它们添加到
.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:
- git rm –cached xxx
- 修改.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]