Невозможно игнорировать .idea / workspace.xml - продолжает появляться


237

Используя PHPStorm, я пытаюсь игнорировать workspace.xml что появляется каждый раз, когда я пытаюсь сделать git commit.

Моя .gitignoreвыглядит так:

/.idea/
.idea/workspace.xml

Поскольку в тот момент, когда файл был зафиксирован, я также выполнил:

git rm --cached .idea/workspace.xml а затем совершил удаление, подтолкнул к голому репо.

Но файл продолжает появляться позже, когда я делаю изменения в проекте.

Любые идеи о том, что мне не хватает?


Перепробовал все ниже, добавил к gitignore, но он все еще продолжает возвращаться, игнорируя gitignore.
Олаф

Похоже на этот же вопрос . Проверьте это и посмотрите ...
Лука Баллор

Проверьте эту ссылку: stackoverflow.com/questions/8156299/… . Похоже, твоя та же проблема.
Лука Баллор

Ответы:


289

Я столкнулся с той же проблемой, и это заставило меня подняться на стену. В итоге проблема заключалась в том, что папка .idea УЖЕ была добавлена ​​в репозиторий ранее, и поэтому они отслеживались git независимо от того, игнорировали вы их или нет. Я бы рекомендовал следующее после закрытия RubyMine / IntelliJ или любой другой IDE, которую вы используете:

mv .idea ../.idea_backup
rm .idea # in case you forgot to close your IDE
git rm -r .idea 
git commit -m "Remove .idea from repo"
mv ../.idea_backup .idea

После этого обязательно игнорируйте .idea в вашем .gitignore

Хотя этого достаточно игнорировать в репозитории .gitignore, я бы посоветовал вам игнорировать точечные файлы вашей IDE глобально.

В противном случае вам придется добавить его в каждый .gitgnore для каждого проекта, над которым вы работаете. Кроме того, если вы сотрудничаете с другими людьми, рекомендуется не загрязнять .gitignore проекта частной конфигурацией, не относящейся к исходному коду проекта.


Последняя команда должна быть «mv ../.idea_backup .idea» вместо «git mv ../.idea_backup .idea», чтобы избежать ошибки git
Лео Казейро

2
Я должен делать git rm .ideaвместо того, git add .ideaчтобы делать работу
Серж

Я также изменил addдля , rmно в моем случае я должен добавить -r, а рекурсивно удалить все. git rm -r .idea
jmendiola

2
Вау ... спасибо !! Пробовал это миллион разных способов безрезультатно. ЭТО правильный шаг за шагом. Главное различие, которое я пропустил, состояло в том, чтобы удостовериться, что моя IDE была закрыта - не пропустите этот шаг! Отличный ответ :)
Джонни Асмар

Спасибо! много-много времени потратил на поиски работающего решения и перепробовал несколько. Это самый простой способ сделать это.
edepe

83

У меня была эта проблема только сейчас, я должен был сделать git rm -f .idea/workspace.xml сейчас, кажется, исчезла (я также должен был положить ее в .gitignore)


7
Я также добавил бы, только ради точности, что идея Intellij должна быть закрыта при выполнении этих шагов.
LoreV

29

Мне пришлось:

  • удалить файл из git
  • отправить коммит на все пульты
  • убедитесь, что все остальные коммиттеры обновлены с удаленного

команды

git rm -f .idea/workspace.xml
git remote | xargs -L1 git push --all

Другие коммиттеры должны бежать

git pull

7
Хотя я рад этому ответу, я не могу не чувствовать, что было бы более полезным, если бы были включены инструкции о том, как выполнить шаги (например, директивы командной строки).
полет

Проверьте эту ссылку: stackoverflow.com/questions/8156299/… . Выглядит точно так же, как ваша проблема.
Лука Баллор

завершить работу IDE \ n git rm -f .idea / workspace.xml \ n git commit -m "удаление workspace.xml" \ n отредактировать .gitignore, чтобы исключить workspace.xml \ n открыть IDE
Srneczek

27

В том же каталоге, где вы видите файл, выполните:

  • rm .idea/workspace.xml
  • git rm -f .idea/workspace.xml (as suggested by chris vdp)
  • vi .gitignore
  • i(для редактирования), добавьте .idea/workspace.xmlв одну из строк Esc,:wq

Вы должны быть хорошими сейчас


2
Или, чтобы добавить строку в .gitignore, просто введите echo .idea/workspace.xml>>.gitignore. Вам не нужно открывать vi для всего. В качестве альтернативы, и что бы я сделал, это иметь отдельный файл .gitignore в каталоге .idea:echo workspace.xml>>.idea/.gitignore
Godsmith

17

Чтобы .idea/полностью удалить из Git, не влияя на вашу конфигурацию IDE, вы можете просто сделать:

git rm -r --cached '.idea/'
echo .idea >> .gitignore
git commit -am "removed .idea/ directory"

6

Если у вас есть несколько проектов в вашем git-репо, .idea/workspace.xmlне будет соответствовать ни одному файлу.

Вместо этого сделайте следующее:

$ git rm -f **/.idea/workspace.xml

И сделайте так, чтобы ваш .gitignore выглядел примерно так:

# User-specific stuff:
**/.idea/workspace.xml
**/.idea/tasks.xml
**/.idea/dictionaries
**/.idea/vcs.xml
**/.idea/jsLibraryMappings.xml

# Sensitive or high-churn files:
**/.idea/dataSources.ids
**/.idea/dataSources.xml
**/.idea/dataSources.local.xml
**/.idea/sqlDataSources.xml
**/.idea/dynamic.xml
**/.idea/uiDesigner.xml

## File-based project format:
*.iws

# IntelliJ
/out/

5

Просто скажите git, чтобы он не предполагал, что он изменен, несмотря ни на что:

git update-index --assume-unchanged src/file/to/ignore

да, вы можете удалить файлы из репозитория git. Но если ваша команда использует одну и ту же среду IDE или вы сами, вы, вероятно, не хотите этого делать. Для себя вы хотите иметь хорошую отправную точку для возобновления работы, в том числе для своих товарищей по команде.


0

То же самое я делал в Android Studio, которая также основана на IntelliJ. В диалоге фиксации я отменил изменение для workspace.xml, затем оно было перемещено в неверсионный файл. После этого я удалил это из диалога фиксации. Теперь он не появится в списке изменений. Обратите внимание, что мой gitignore уже включал .idea / workspace.xml


0

Так как в моем случае , я выполнял первую фиксацию проекта, просто удалите .gitи .ideaпапки , а затем переинициализация мерзавца с помощью git initпомогло решить проблему. Теперь у меня нет .ideaвообще.


0

Та же проблема для меня с PHPStorm

Наконец я решил сделать следующее:

  • Удалить .idea / каталог
  • Перемещение .gitignore на тот же уровень будет новым сгенерированным .idea /
  • Напишите файлы, которые нужно игнорировать, и .idea / тоже. Чтобы быть уверенным, что это будет проигнорировано, я поставил следующее:

    • .idea /
    • .idea
    • .idea / *

Я не знаю, почему так работает, может быть .gitignore должен быть на том же уровне .idea, чтобы этот каталог можно было игнорировать.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.