git - Git 中停止跟踪并忽略更改到一个文件

  显示原文与译文双语对照的内容

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

我已经将 *.csproj 添加到本地 .gitignore,但这些文件已经在仓库中。

当我键入git状态时,它会显示对 csproj的更改,我对跟踪或者提交补丁不感兴趣。

如何删除这些文件从我个人回购"正在跟踪"( 但保留在源代码中,这样我就可以使用它们了) 这样我看不到变化状态( 或者创建一个补丁) 当我做什么?

是否有正确的/标准方法来处理这种情况?

时间:

如果你做 git update-index --assume-unchanged file.csproj ,git不会自动检查 file.csproj的更改: 当你改变它们时,它将阻止它们在git状态下出现。 因此,你可以将所有的。csproj文件标记为这个 way-,尽管你必须手工标记上游仓库发送给你的任何新文件。 ( 如果你在 .gitignore 或者 .git/info/exclude 中拥有它们,那么你创建的它们将被忽略)

我不完全确定。csproj文件是什么。。 如果他们的ide配置( 类似于 Eclipse 和。classpath文件。) 那么我建议他们应该永远 source-controlled 。 另一方面,如果它们是构建系统( 像 makefile )的一部分,那么很显然它们会should---和一个选择可选的本地更改的方法( 例如。 来自 local.csproj的。mk将非常有用: 将构建划分为全局部分和局部覆盖。

这是一个两步过程:

  1. 删除文件/文件夹的跟踪- 但将它们保留在磁盘上- 使用 git

     
    rm --cached 
    
     
    • 现在它们并不显示为"已经更改",但仍然显示为

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

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

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

或者

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

e.t.c 。

就像其他答案中指出的,所选答案是错误的。

到另一个问题的回答表明,它可能是skip-worktree那将是必需的。


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

I am assuming that you are have a how to remove all files in a specific folder or bin folder, rather than selecting each files separately.

你可以使用以下命令:

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

确保你位于该目录的父目录中。
这里命令将递归地"删除"/或者构建/文件夹中的所有文件。 我删除这个词意味着git将"已经删除"假装这些文件,这些文件将不会被跟踪。 git真的将那些文件标记为删除模式。

确实要让你的gitignore准备好即将提交。
文档:git

...