不小心将 .idea 目录文件提交到 git

Posted

技术标签:

【中文标题】不小心将 .idea 目录文件提交到 git【英文标题】:Accidentally committed .idea directory files into git 【发布时间】:2012-06-22 20:31:18 【问题描述】:

我不小心将.idea/ 目录提交到了git。这在我需要检查我的仓库的其他地方引起了冲突。我想知道如何从遥控器中删除这些文件?

我仍然需要这些文件,因为 Intellij IDE 需要它们。我只是不希望它们在遥控器中。我已将目录.idea/ 添加到我的.gitignore 并提交并将此文件推送到远程。不过,这在我在另一台机器上结账时似乎没有任何影响。我仍然收到错误消息:

error: The following untracked working tree files would be overwritten by checkout:
.idea/.name
.idea/compiler.xml
.idea/copyright/profiles_settings.xml
.idea/encodings.xml
.idea/misc.xml
.idea/modules.xml
.idea/scopes/scope_settings.xml
.idea/uiDesigner.xml
.idea/vcs.xml
.idea/workspace.xml

【问题讨论】:

您可以通过审查您的提交来帮助避免这种情况。我更喜欢在编写提交时运行 commit-v 以在编辑器中显示差异。它有助于防止此类错误,并帮助您将提交信息集中在您所做的更改上。 丹妮丝是对的。另外,Git 默认情况下要求您将文件添加到已提交更改的列表中,因此请使用它,不要一次提交所有内容。否则,您将通过添加.idea 来污染您的存储库。 .idea 中除两个文件外的所有文件都应在源代码管理中:devnet.jetbrains.com/docs/DOC-1186 我发现 IntelliJ .ignore 插件在您想要管理所有不应提交到 git 的文件时非常有用:plugins.jetbrains.com/plugin/7495?pr=idea 嗨,如果我们在远程存储库中有 .idea 有什么害处? 【参考方案1】:

将 .idea 目录添加到忽略文件列表中

首先,将其添加到.gitignore,这样就不会再次被您(或其他人)意外提交:

.idea

从存储库中删除它

其次,仅从存储库中删除目录,但不要在本地删除它。为此,请执行此处列出的操作:

Remove a file from a Git repository without deleting it from the local filesystem

将更改发送给其他人

第三,提交.gitignore 文件并从存储库中删除.idea。之后将其推送到遥控器。

总结

整个过程如下所示:

$ echo '.idea' >> .gitignore
$ git rm -r --cached .idea
$ git add .gitignore
$ git commit -m '(some message stating you added .idea to ignored entries)'
$ git push

(您可以选择将最后一行替换为git push some_remote,其中some_remote 是您要推送到的遥控器的名称)

【讨论】:

注意:如果您在运行git rm -r --cached .idea 时收到消息fatal: pathspec '.idea' did not match any files,请删除您的.idea 文件夹,从github 拉取然后重试。 如果您收到@annedroiid 错误“不匹配任何文件”,您可以尝试添加其路径。就像我删除 database.yml 文件时一样,我只是简单地执行了 'git rm -r --cached config/database.yml' .idea 目录中的一些文件应该签入到您的存储库中。请参阅 github.com/github/gitignore/blob/master/Global/… 以获取 JetBrains 关于 .gitignore 外观的建议。 我一辈子都无法从我们的存储库中取出这个文件夹...切换分支不断重新跟踪它...人们已经在多个分支上运行了这个,并且任何时候切换分支.. .git 认为它需要......在某个时候......删除你的 .idea 文件夹所以......简而言之......现在切换分支基本上是我们的设置擦除。我尝试在 master 上运行它……然后合并到所有分支中……但仍然在擦除设置。 我们是否有永久解决方案将此设置为 IntelliJ 以从不添加 .idea 文件夹来提交文件?【参考方案2】:

您可以将其从 repo 中删除并提交更改。

git rm .idea/ -r --cached
git add -u .idea/
git commit -m "Removed the .idea folder"

之后,您可以将其推送到遥控器,之后的每次结帐/克隆都可以。

【讨论】:

这对我有用,而不是接受的答案。也许是 git add -u 造成了不同。 你不需要第二行。 正如其他人所说,我没有跑第二行。像魅力一样工作!谢谢【参考方案3】:

最好在 Master 分支上执行此操作

编辑 .gitignore 文件。在其中添加以下行。

.idea

从远程仓库中删除 .idea 文件夹。使用下面的命令。

git rm -r --cached .idea

了解更多信息。参考:Removing Files from a Git Repository Without Actually Deleting Them

暂存 .gitignore 文件。使用以下命令

git add .gitignore

提交

git commit -m 'Removed .idea folder'

推送到远程

git push origin master

【讨论】:

【参考方案4】:

您应该在您的项目中添加一个 .gitignore 文件,并在其中添加/.idea。您应该在一行中添加每个目录/文件。

如果您有一个现有的 .gitignore 文件,那么您只需在文件中添加一个新行并将/.idea 放入新行。

之后运行git rm -r --cached .idea 命令。

如果遇到错误,可以运行git rm -r -f --cached .idea 命令。毕竟运行git add . 然后git commit -m "Removed .idea directory and added a .gitignore file" 最后通过运行git push 命令推送更改。

【讨论】:

【参考方案5】:

如果你还没有推送到 git

git rm .idea/ -r --cached
git add -u .idea/
git commit -m "Removed the .idea folder"

如果 "git rm .idea/ -r --cached" 抛出错误 "fatal: pathspec '.idea' did not match any files" 并且已经推送到带有 .idea 的 git。

git push origin --delete remoteBranchName
git add . //Everything is up to date
git commit -m "Removed the .idea folder" //Nothing to commit
git push origin remoteBranchName

【讨论】:

【参考方案6】:

为避免此问题再次发生,我发现拥有一个包含 .idea 的全局 gitignore 文件很有用,例如:

$ echo '.idea' >> ~/.gitignore_global
$ git config --global core.excludesfile ~/.gitignore_global

这种方法的另一个优点是您不需要使用 IDE 的详细信息“污染”项目的 .gitignore 文件。 OTOH,您也可以选择将.idea 添加到项目的.gitignore,这样该项目的其他贡献者就不会遇到问题。

【讨论】:

以上是关于不小心将 .idea 目录文件提交到 git的主要内容,如果未能解决你的问题,请参考以下文章

git-忽略已提交的文件或目录

webstorm 怎么禁止git提交.idea目录

图文超详细解决IDEA使用Git忽略提交一个某个文件

idea Terminal git 提交时 中文乱码

在centos搭建git服务器时,不小心把/home/git目录删除了,我是怎么恢复的

IDEA创建.gitignore文件模板忽略git提交.idea等文件