Mercurial HG статус отображения игнорируемых файлов
может ли кто-нибудь сказать мне, почему mercurial отображает игнорируемые файлы для команды "HG status"?
вот подтверждение того, что mercurial действительно игнорирует файлы:
$ hg addremove
$ hg commit
nothing changed
теперь взгляните на вывод состояния. Я запустил это сразу после строк выше. (Prinout является частичным, с идентифицируемым текст удален)
$ hg status
? Core/target/Core-0.0.1-SNAPSHOT-tests.jar
? Core/target/Core-0.0.1-SNAPSHOT.jar
? Core/target/classes/META-INF/MANIFEST.MF
? Core/target/classes/xxx/yyy/zzz/X.class
? Core/target/classes/xxx/yyy/zzz/XBackup.class
? Core/target/classes/xxx/yyy/zzz/XBackupInput.class
? Core/target/classes/xxx/yyy/zzz/XBackupOutput.class
? Core/target/classes/xxx/yyy/zzz/XImpl$GetResultsAndStatistics.class
? Core/target/classes/xxx/yyy/zzz/XImpl$MonitoringMode.class
? Core/target/classes/xxx/yyy/zzz/XImpl$UpdateMode.class
? Core/target/classes/xxx/yyy/zzz/XImpl.class
? Core/target/classes/xxx/yyy/zzz/XIsFullException.class
? Core/target/classes/xxx/yyy/zzz/XSource.class
? Core/target/classes/xxx/yyy/zzz/XUsageException.class
? Core/target/classes/xxx/yyy/zzz/CheckResults.class
? Core/target/classes/xxx/yyy/zzz/Noise.class
? Core/target/classes/xxx/yyy/zzz/core/DateTimeGenerator$TemporalMeasure.class
? Core/target/classes/xxx/yyy/zzz/core/DateTimeGenerator.class
? Core/target/classes/xxx/yyy/zzz/core/LoggingConfigurator.class
? Core/target/classes/xxx/yyy/zzz/core/ManagedIterator.class
? Core/target/classes/xxx/yyy/zzz/core/NetworkUtils.class
? Core/target/classes/xxx/yyy/zzz/core/StackTraceUtils.class
? Core/target/classes/xxx/yyy/zzz/core/Summarisable.class
? Core/target/classes/xxx/yyy/zzz/core/TimingUtils.class
? Core/target/classes/xxx/yyy/zzz/core/XMLStaticStringUtils.class
? Core/target/classes/xxx/yyy/zzz/core/Zipper.class
...
есть что-то вроде тысячи строк этих игнорируемых файлов, отображаемых в распечатке состояния; это серьезно пустая болтовня.
как я могу избавиться от этого?
спасибо
обновление:
вот мой .hgignore файл.
syntax:glob
.metadata*
syntax:regexp
^target.*$
^[^/]*/target.*$
^[^/]*/[^/]*/target.*$
^bin.*$
^[^/]*/bin.*$
^[^/]*/[^/]*/bin.*$
обновление:
измененные регулярные выражения немного* -> .*
7 ответов
ваш синтаксис regexp неверен. У вас есть это:
syntax:regexp
^target*$
что означает " игнорировать все, начиная с target и заканчивая звездочка
который не может игнорировать эти:
Core/target/classes/META-INF/MANIFEST.MF
Core/target/classes/xxx/yyy/zzz/X.class
по двум причинам-они начинаются с Core/
не target
и они не заканчиваются звездочкой.
вы, вероятно, имели в виду следующее:
syntax:regexp
^.*/target/.*$
который соответствует всему, что имеет /target/
в нем (обратите внимание на это .*
в регулярное выражение *
для стиля Глоба). Однако ^
и $
служат только для укоренения вашего регулярного выражения, и вы не хотите, чтобы оно укоренилось - вы хотите найти его в любом месте строки, поэтому просто сделайте это:
syntax:regexp
/target/
ключом ко всему этому было то, что файлы были помечены ?
что означает не игнорируется и не добавляется, если бы они были проигнорированы, вы бы не увидели их вообще без добавления --ignored
на состояние команды.
Я получил аналогичную проблему, потому что я изменил случай письма для некоторых файлов. Поэтому ранее я получил файл под названием "sitenav.ext", переименовал его в " siteNav.ext "и начали иметь такие же проблемы - когда я попытался "hg st " я получил"? ситенав.доб." Исправить было легко переименовать в "_siteNav.доб", addremove, совершать, переименовать обратно в " siteNav.доб", addremove, commit - > прибыль!
прокомментировал Джером в вопросе, предоставление вашей конфигурации может помочь.
одной (по общему признанию странной) причиной вашей проблемы может быть проблема с разрешением .hgignore
файл в сочетании с exclude по умолчанию на .
я мог бы воспроизвести вашу ситуацию, отозвав любое разрешение на чтение из файла ignore и используя -X "**/target/**"
в качестве опции по умолчанию для addremove
команда (которая может быть установлена в любом из возможные файлы конфигурации Mercurial):
$ hg st
# no output, as expected
$ chmod 000 .hgignore
$ hg addremove # with '-X "**/target/**"' set as default somewhere
$ hg commit
nothing changed
$ hg st
? Core/target/Core-0.0.1-SNAPSHOT-tests.jar
? Core/target/Core-0.0.1-SNAPSHOT.jar
...
hg
не удается прочитать файл игнорирования и, следовательно, не знает, что цель вещи следует игнорировать. Соответствующее предупреждение от hg
было бы полезно здесь.
этот вопрос был обновлен в ответ на комментарий Джерома.
большое спасибо за помощь в этом. Я не нашел ответа на проблему, но я нашел обходной путь, который избавился от него. Поэтому я предполагаю, что в какой-то момент при изменении hgignore regexps mercurial запутался и испортил его внутренние данные... или что-то. Я не знаю достаточно внутренних органов, чтобы знать, что это могло быть.
в любом случае, если вы окажетесь в одной лодке, вот что я сделал:
- убедитесь, что ваш .файл hgignore говорит то, что вы хотите, и что все файлы, появляющиеся в состоянии hg, являются теми, которые вы хотите игнорировать.
- добавить все файлы, которые будут проигнорированы. HG addremove не работает, потому что он чтит содержимое hgignore, поэтому я использовал плагин Hg Eclipse и делал каждый файл вручную (Ну, я выбрал их все, и Eclipse применил добавление ко всем им по отдельности).
-
отменить все добавленные файлы. Я использовал следующее, потому что я на linux. (благодаря другому плакату на отдельном вопрос здесь на SO-который я больше не могу найти к сожалению)
HG status-an0 / xargs -0 HG revert
повторите вышеуказанный шаг, пока он больше не будет работать. В моем случае это было иногда до 3 возвращается в ряд! (Не знаю, что он на самом деле делал :( )
- commit
теперь вы больше не должны видеть игнорируемые файлы в выводе состояния hg.
извините, я понятия не имею, почему это сработало, или в чем была изначальная проблема. Если кто-то знает, мне было бы очень интересно узнать ваши мысли.
еще раз большое спасибо всем :)
? не значит игнорировать.
Это просто означает, что mercurial не отслеживает файл.
Если вы не хотите их видеть, просто сделайте
статус hg-mard
т. е. показывать только измененные, добавленные, удаленные, удаленные
ваш .файл hgignore говорит, что "^target " игнорируется, но файлы находятся в Core/target. Поэтому строка игнорирования должна быть " target "(без ^) или"^Core/target".
или мне не хватает sth здесь?
(Примечание: ^ подразумевает, что соответствие регулярным выражениям начинается с начала пути, т. е. только пути начиная с С целью будет соответствовать!)
была та же проблема, и ответ Боба сделал трюк для меня.
Если вы используете TortoiseHg, вы можете выбрать "edit ignore filter" в контекстном меню (windows), чтобы проверить и изменить свой .параметры hgignore есть.