我把这个添加到。gitignore文件

.idea/*

但无论如何,现状是:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

我做错了什么? 我甚至在全局变量~/.gitignore_global中添加了.idea/* 但是git的状态告诉我:

#       modified:   .gitignore
#       modified:   .idea/.generators
#       modified:   .idea/dovezu.iml
#       modified:   .idea/misc.xml
#       modified:   .idea/workspace.xml

当前回答

我插一句。在我的例子中,子目录中有一个git repo,因为我从其他人那里解压缩了一个zip文件,然后递归地将他们解压缩zip中的所有内容复制到我的repo中,而没有检查我正在复制什么。

一旦我吹走了我现有的回购中的.git目录,一切都很好。

其他回答

这将允许您删除缓存的索引文件,然后只添加您需要的索引文件,包括对.gitignore文件的更改。

Git rm -r——cached。 Git添加。 git commit -m删除被忽略的文件

这些行动可以实现以下目标:

步骤1:该命令将清除所有缓存文件的索引。 步骤2:该命令将添加除文件之外的所有文件 gitignore列表。 步骤3:通过使用这个命令,你可以删除你想要git的文件 忽略,同时保持他们在您的本地目录和重新提交您的 文件。

简单添加git rm -r——cached <folder_name/file_name>

有时,在文件的commit命令之后更新.gitignore文件。文件被缓存在内存中。要删除缓存的文件,使用上面的命令。

在我的例子中,.gitignore文件以某种方式损坏了。它有时显示得很好,但有时是胡言乱语。我想编码可能是罪魁祸首,但不能确定。为了解决这个问题,我删除了这个文件(之前在VS Code命令行中通过echo > .gitgore创建的),并在文件系统(资源管理器)中手动创建了一个新的文件,然后添加了我的忽略规则。在新的.ignore到位后,一切都可以正常工作。

您的.gitignore正在工作,但它仍然跟踪文件,因为它们已经在索引中。

要停止这个,你必须这样做:git rm -r——cached .idea/

当你提交时。idea/目录将从你的git存储库中删除,接下来的提交将忽略。idea/目录。

PS:你可以用.idea/代替.idea/*来忽略一个目录。您可以在.gitignore手册页上找到关于模式的更多信息。


来自git-rm手册页的有用引用

--cached
    Use this option to unstage and remove paths only from the index. 
    Working tree files, whether modified or not, will be left alone.

使用git rm——cached *file*对我来说不是很好(我知道这个问题已经8年了,但它仍然显示在搜索这个主题的顶部),它确实从索引中删除了文件,但它也从远程删除了文件。

我不知道这是为什么。我所希望的是保持本地配置的隔离(否则我必须在每次提交之前注释localhost基url),而不是删除与配置相同的远程配置。

读了更多,我发现了做这件事的正确方法,也是我所需要的唯一方法,尽管它确实需要更多的注意,特别是在合并期间。

不管怎样,它所需要的是git update-index——assume-unchanged *path/to/file*。

据我所知,这是最值得记住的事情:

Git会失败(优雅地),如果它需要在索引中修改这个文件,例如在提交合并时;因此,如果假设未跟踪的文件在上游被更改,您将需要手动处理这种情况。