gitignore 文件没有忽略.idea 目录。

59
在使用PhpStorm IDE开发Symfony2项目时,我将一些文件添加到了git忽略列表中。但是一个文件即使被添加到了git忽略列表中仍然一直出现。我尝试了多次,但它总是在那里。 .gitignore 文件:
/app/config/parameters.yml
/bin/
/build/
/composer.phar
/vendor/
/web/bundles/
/app/bootstrap.php.cache
/app/cache/*
!app/cache/.gitkeep
/app/config/parameters.yml
/app/logs/*
!app/logs/.gitkeep
/app/phpunit.xml

#IDE metadata
**.idea/**

#Bash files
run.sh

而且正是Git无法忽略的.idea文件夹/文件:

On branch develop
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .idea/workspace.xml

no changes added to commit (use "git add" and/or "git commit -a")

任何想法为什么git不会像我在gitignore中指定的那样忽略整个目录?

可能是忽略已经提交到Git存储库的文件的重复问题。 - 1615903
6个回答

74

Git从不忽略跟踪文件的更改。当它出现为修改时,该文件处于版本控制之下(通常不应包括.idea/workspace.xml文件),因此对其进行的更改将被跟踪。使用git rm --cached .idea/workspace.xml从索引中删除它,保持本地副本不变,并提交此更改。从那时起,它将被忽略,除非您强制重新添加到存储库或更改gitignore设置。


好的,让我看看我是否理解了这个问题。所以一旦你提交了一个文件,然后决定将这个文件添加到gitignore中,git仍然会跟踪对该文件的更改,因为它存在于第一次提交时创建的git缓存中,包括该文件...?如果我理解得正确,那么有没有一种方法可以查看git缓存内容...? - John
你甚至不需要提交。只要将文件添加到索引中,它就会被跟踪,无论在任何gitignore文件中写了什么。关于你的另一个问题。“Git Cache”不是官方术语,所以我不确定你具体指的是什么。你想知道什么? - Vampire
git ls-tree -r --full-tree --name-only <tree-ish> - Vampire
但您也可以根据需要使用ls-files。使用ls-files,您可以列出索引和工作树中的文件及其相关信息。使用ls-tree,您可以列出特定提交时的树形结构。 - Vampire
好的,这一切都很合理并且有效。非常感谢您的时间和帮助,非常感激。致意。 - John
显示剩余3条评论

34
提交文件后,它将开始被跟踪。为了从此时开始移除文件,您必须将它们从仓库中删除。
现在,您需要删除整个.idea文件夹,提交删除操作,并将idea扩展名添加到您的.gitignore文件中。
注意:
您仍然可以使用assume-unchanged标志来忽略已添加的文件。
"--[no-]assume-unchanged"指定此标志时,记录的路径的对象名称不会更新。相反,此选项为路径设置/取消“假定未更改”位。
当假定为unchanged位打开时,用户承诺不更改文件,并允许Git假设工作树文件与索引中记录的内容匹配。
如果您想要更改工作树文件,您需要取消设置该位以告诉Git。当Git需要修改此文件时(例如,在合并提交时),它将失败(优雅地);因此,在上游更改假定未跟踪的文件时,您需要手动处理这种情况。
从命令行解释如何操作,也可以通过IDEA完成。
# Remove the file from the repository
git rm --cached .idea/

# now update your gitignore file to ignore this folder
echo '.idea' >> .gitignore

# add the .gitignore file
git add .gitignore

git commit -m "Removed .idea files"
git push origin <branch>

除非你是一个真正的Git高手并且清楚自己在做什么,否则绝对不要使用--assume-unchanged标志。否则你只会冒着风险。在IRC的#git频道中,我们一直强烈反对使用它,并且这并非没有原因。 - Vampire
主要问题是你可能会忘记将其“关闭”并且丢失更改。 - CodeWizard
1
好吧,普通用户在使用了这个开关5分钟后就会忘记它的存在。;-) - Vampire
2
git rm --cached -r .idea/ - Wajdy Essam
3
在PowerShell中运行git rm --cached -r .\.idea\git rm --cached -r .idea/时,无论是否使用-r标志,都会收到消息“fatal: pathspec '..idea' did not match any files”。 - Josh Desmond
git rm --cached -r . 用于清除所有缓存。但是你需要在干净的状态下运行它。 - s.alem

8
#idea folder
.idea/

这对我很有效。

1

当我们提交某些内容时,git开始跟踪文件夹/项目。我们也可以从项目中删除不必要的文件。

要从项目中删除.idea/文件夹,请按照以下步骤进行:

  1. 确保您已将.idea/添加到您的.gitignore文件中。
  2. 运行以下命令

    git rm -r --cached .
    git add .
    git commit -m "untracked fixed"

希望它能解决问题。


"git add ." 通常是提交不应该的东西的好方法。 - OznOg

1
我在gitignore文件中添加了这个内容,对我有用。

**/.idea


0
找到.idea文件夹的路径,然后将其添加到.gitignore文件中 例如:
.idea*

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接