不小心将 .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的主要内容,如果未能解决你的问题,请参考以下文章