5

Как убрать workspace.xml, чтобы он не индексировался?

В .gitignore написано

.idea/workspace.xml
/.idea/workspace.xml
.idea
/.idea
*/.idea/workspace.xml

но она все равно индексируется.

Nick Volynkin
  • 34,094
J Mas
  • 2,058
  • 7
  • 36
  • 71
  • git rm -r --cached .idea – etki Mar 18 '15 at 03:12
  • @etki сделал так, первый коммит будто удалил эти файлы, а следующий коммит не добавляет и как будто изменяет эти файлы, их там 13, то есть опять индексируются – J Mas Mar 18 '15 at 07:22
  • @eldqs, будто? Где валяется гитигнор? – etki Mar 18 '15 at 08:46
  • в папке проекта в корне, получается сначала он удалил было написано удалено 13 файлов а при втором коммите он заново индексирует и написано изменено 13 файлов, то есть файлы которые удалил. – J Mas Mar 18 '15 at 09:00
  • @eldqs, это проблемы гитигнора, судя по всему. Не знаю, почему он его игнорирует, но в первый раз, судя по всему, всё прошло ок. С помощью git status можно посмотреть, что гит хочет сделать с файлами при следующем коммите, там же будет видно, когда гитигнор начнет действовать. – etki Mar 18 '15 at 10:29
  • Решение в общем виде: http://ru.stackoverflow.com/a/432895/ – Nick Volynkin Jul 01 '15 at 23:28

2 Answers2

6

Видимо, файлам уже был ранее сделан commit, поможет

mv .idea .idea1
git rm -r .idea
git commit [--amend]
mv .idea1 .idea

Либо правка ранее сделанных коммитов git rebase -i ... и там git rm -r --cached .idea

sercxjo
  • 6,904
  • 2
  • 27
  • 57
  • 2
    А чтобы не делать дважды mv, можно один раз добавить --cached. – Nick Volynkin Sep 05 '15 at 20:25
  • Я думал --cached только к изменениям подготовленным для коммита относится, а нет, в зависимости от того с чем совпадает содержимое - либо из индекса либо из ветки. – sercxjo Sep 07 '15 at 03:58
6

наболее краткий вариант (всего две изменяющие что-либо команды)

  1. рекурсивно удаляем из репозитория каталог (рабочая копия не затрагивается — меняется только содержимое индекса):

    $ git rm -r --cached .idea
    

    перед git commit всегда полезно посмотреть git status и убедиться, что всё идёт так, как надо:

    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
        deleted:    .idea/workspace.xml
    
  2. всё в порядке. делаем commit. рабочая копия тем более не затрагивается — меняется содержимое репозитория (всего того, что находится в каталоге .git):

    $ git commit ...
    

проверяем:

$ ls .idea
workspace.xml

да, файл на месте.

а в .gitignore достаточно оставить одну строку (из всех озвученных в вопросе):

.idea
  • $ не является внутренней или внешней коммандой.. куда это "$ git rm -r --cached .idea" вводить? – Sergey Shturnev Jun 01 '16 at 10:57
  • @SergeyShturnev, знак доллара в данном случае означает приглашение оболочки. сама команда — это то, что после знака доллара. – aleksandr barakin Jun 01 '16 at 14:43