意外将.idea目录文件提交到git


306

我不小心将.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

10
您可以通过查看自己的提交来避免将来发生这种情况。我更喜欢在编写提交时commit使用-v来在编辑器中显示差异。它有助于防止这种错误,并帮助您将提交消息集中在更改的内容上。
2012年

丹妮丝是对的。默认情况下,Plus Git要求您将文件添加到已提交更改的列表中,因此请充分利用它,不要一次提交所有内容。否则,您将通过添加存储库来污染存储库.idea
塔德克2012年

1
.idea中的除两个文件外的所有文件都应位于源代码控制中:devnet.jetbrains.com/docs/DOC-1186
cja 2013年

当您要管理不应提交给git的所有文件时,我发现IntelliJ .ignore插件非常有用: plugins.jetbrains.com/plugin/7495?
pr=idea

嗨,如果我们在远程存储库中有.idea,那有什么害处?
milad salimi

Answers:


676

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

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

.idea

从存储库中删除

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

从Git存储库中删除文件,而不从本地文件系统中删除文件

将变更发送给其他人

第三,提交.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是您要推送到的遥控器的名称)


4
注意:如果fatal: pathspec '.idea' did not match any files在运行时收到消息,请git rm -r --cached .idea删除.idea文件夹,从github中拉出,然后重试。
annedroiid

如果您收到“未匹配任何文件”的@annedroiid错误,则可以尝试添加其路径。当我删除database.yml文件一样,我根本“git的RM -r --cached的config / database.yml的”
鲁托柯林斯

.idea目录中的某些文件应签入您的存储库。请参阅github.com/github/gitignore/blob/master/Global/…,以获取有关.gitignore外观的JetBrains建议。
tokenizer_fsj

2
我一辈子都无法从我们的存储库中取出该文件夹...切换分支不断跟踪它...人们已经在多个分支上运行了此文件夹,并且每次切换分支时... git认为它需要.. 。在某个时候...删除您的.idea文件夹,以便..简而言之...现在切换分支对于我们来说基本上是一项设置。我试过在master上运行它...然后合并到所有分支中..仍然擦拭设置。
nawlbergs

1
我们是否有一个永久的解决方案,将其设置为IntelliJ,从不添加.idea文件夹来提交文件?
Serhat

88

您可以将其从存储库中删除并提交更改。

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

之后,您可以将其推送到远程,之后的每个结帐/克隆操作都可以。


10
这对我有用,而不是公认的答案。也许是git add -u才有所作为。
Paolo Mioni 2016年

您不需要第二行。
kjdion84 '17

正如其他人所说,我没有参加第二线比赛。像魅力一样工作!谢谢
blackkara '17

0

您应该将.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命令来推送更改。


0

最好通过Master分支执行此操作

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

.idea

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

git rm -r --cached .idea

有关更多信息。参考:从Git存储库中删除文件而不实际删除它们

阶段.gitignore文件。使用以下命令

git add .gitignore

承诺

git commit -m 'Removed .idea folder'

推送到远程

git push origin master

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.