Проблема с игнорированием подкаталога в git

У меня есть проект с несколькими модулями maven, глубина которого составляет около 5 уровней.
Сейчас я перехожу на git и вижу, что большая часть содержимого папки target фиксируется git как «неустановленные изменения».
Я много гуглил и искал SO, но не смог найти ответа, как заставить git игнорировать все дерево каталогов папки target.
Мой .gitignore, который находится в корне проекта, выглядит так:

.project  
.classpath
.settings/
target/

Странно то, что файлы .class, которые находятся где-то под деревом target, игнорируются приведенными выше определениями, но такие файлы, как MANIFEST.MF, pom.properties или файлы свойств моего собственного приложения, расположенные где-то в дереве каталогов target, не игнорируются. < br> Я прочитал Git Ignores и Maven target, но это решение не похоже работают на меня.
Я также могу сказать, что когда я пытаюсь добавить target/* правило, оно ничего не меняет, и когда я заменяю target/ на target/*, тогда файлы .class также отображаются как неустановленные.
Я бы действительно ценю некоторые рекомендации, поскольку мне кажется очень маловероятным, что орды людей, использующих git и maven, еще не решили подобные проблемы. Спасибо.


person Ittai    schedule 26.12.2011    source источник
comment
Вы фиксировали какие-либо из этих файлов в target/ каталоге в своем репозитории раньше? Добавление файла в .gitignore не имеет никакого эффекта, если файл уже отслеживается git.   -  person KL-7    schedule 26.12.2011
comment
@ KL-7 Мой партнер сделал первоначальную фиксацию, но на самом деле это может быть проблемой. Я проверю и доложу. Если да, вы можете опубликовать это как ответ, и я приму.   -  person Ittai    schedule 26.12.2011


Ответы (3)


Одна из причин может заключаться в том, что вы уже зафиксировали эти файлы в своем репозитории. В этом случае добавление их в .gitignore не мешает git отслеживать эти файлы. Чтобы исправить это, вы должны сначала удалить их из репозитория следующим образом:

git rm -r target/

(Если в вашем проекте есть модули, вам необходимо указать путь к цели соответствующего модуля:
git rm -r parent_project/module_name/target/)

Если вы хотите удалить каталог из репозитория, но не с диска, вы можете использовать опцию --cached:

git rm -r --cached target/

В любом случае вы должны затем зафиксировать это удаление в репозитории (вы можете сделать это в той же фиксации, добавив target/ в .gitignore, если хотите).

person KL-7    schedule 26.12.2011
comment
Извините за новичка, но когда я делаю git rm -r --cached target/, он удаляет только в моем локальном репозитории? Если так, то позже мне нужно будет переместить локальный репозиторий в мой удаленный репозиторий, верно? - person Ittai; 26.12.2011
comment
Да, сначала вам нужно зафиксировать эти изменения, а затем отправить их в удаленный репозиторий. - person KL-7; 26.12.2011
comment
Я не забыл. У меня проблемы с этой проблемой, но я думаю, что это больше связано с моим текущим отсутствием опыта работы с git, чем с вашим решением. Я отправлю / приму ваш ответ, как только смогу. Спасибо. - person Ittai; 26.12.2011
comment
Ключевая дополнительная проблема - одна из причин может заключаться в том, что вы уже зафиксировали эти файлы в своем репозитории. В этом случае добавление их в .gitignore не мешает git отслеживать эти файлы. огромное спасибо - person a darren; 19.12.2013
comment
Из документации. Цель файлов gitignore - гарантировать, что определенные файлы, не отслеживаемые Git, останутся неотслеживаемыми. . Чтобы остановить отслеживание файла, который в настоящее время отслеживается, используйте git rm --cached. - person Ahmad Abdelghany; 24.05.2016

target
target/*

Добавьте эти строки в gitignore, чтобы игнорировать целевой файл и все файлы внутри target. Это не должно больше отслеживать эту папку и ее содержимое.

person Manish Shrestha    schedule 10.08.2012

В качестве альтернативы, используя tortoisegit для целевой папки, просто выберите «Удалить и добавить в список игнорирования».

person István Békési    schedule 27.11.2014