Проблема с игнорированием подкаталога в git - PullRequest
26 голосов
/ 26 декабря 2011

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

.project  
.classpath
.settings/
target/

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

Ответы [ 3 ]

55 голосов
/ 26 декабря 2011

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

git rm -r target/

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

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

git rm -r --cached target/

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

4 голосов
/ 10 августа 2012
target
target/*

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

2 голосов
/ 27 ноября 2014

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

...