Я ненавижу видеть почти каждый каталог в моем репозитории каждый файл дважды, один раз с точкой перед ним и один раз без него. Я попытался добавить .*
в файл .hgignore, но это не влияет. Это неправильный синтаксис, и что еще более важно, это плохая идея попробовать это в первую очередь? Благодарю.Как заставить mercurial игнорировать все скрытые файлы?
ответ
У вас есть почти правильный ответ в комментариях от gavinb, но матч был немного шире. Тем не менее, ключевая концепция игнорирования после лица была предоставлена RogerPage, снова в комментарии (что у всех предпочитают комментарии к ответам?).
Давайте посмотрим на эти девять файлов:
dir.with.dots/file.with.dots
dir.with.dots/filewithoutdots
dir.with.dots/.filestartwithdot
dirwithoutdots/file.with.dots
dirwithoutdots/filewithoutdots
dirwithoutdots/.filestartwithdot
.startwithdot/file.with.dots
.startwithdot/filewithoutdots
.startwithdot/.filestartwithdot
Если в режиме регулярных выражений по умолчанию для hgignore вы делаете:
\..*
Вы игнорируете восемь из этих девяти файлов:
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dir.with.dots/file.with.dots
I dir.with.dots/filewithoutdots
I dirwithoutdots/.filestartwithdot
I dirwithoutdots/file.with.dots
, который более широк, чем вы сказали, что хотите. Он игнорирует что-либо с точкой где угодно.
Чтобы игнорировать все файлов и directores (не то, что вы сказали, но то, что вы, кажется, хочет), начиная с точкой вы используете регулярное выражение шаблона:
(^|/)\.
, который говорит, что вещь, прежде чем буквальные точка должна быть началом строки (^
) или косой чертой.
$ hg stat -i
I .hgignore
I .startwithdot/.filestartwithdot
I .startwithdot/file.with.dots
I .startwithdot/filewithoutdots
I dir.with.dots/.filestartwithdot
I dirwithoutdots/.filestartwithdot
Это поймало только файлы или каталоги, начинающиеся с точки.
Однако другая ключевая концепция, которая возникла, заключалась в том, что .hgignore не имеет эффекта после добавления файла. Это предотвратит добавление с помощью wild card, но вы всегда можете переопределить .hgignore с явным hg add
. и после того, как файлы были добавлены, hgignore больше не запрашивается.
Это действительно очень удобно, потому что вы можете игнорировать широко (ex: .*\.jar
), а затем добавить исключения, которые вы хотите вручную, без необходимости использовать futz с вашим файлом hgignore. Однако в этом случае это означает, что вам нужно добавить hg rm
файлы, которые вы уже добавили случайно, и tonfa показал, как это сделать (пока в ваших файлах нет пробелов).
В конце концов, это звучит как то, что вы хотите в вашем файле .hgignore является:
(^|/)\._
и что вам нужно, чтобы удалить те, которые вы уже добавили:
find . -type f -name "._*" -print0 |xargs -0 hg rm
Путь, слишком тщательный. Престижность! –
Я использую это в моем .hgignore
:
syntax: regexp
# dotfiles
(?<![^/])\.
который гласит: периоды не предшествует нечто иное, чем аф orward slash.
Решение Ry4an тоже хорошо, я тоже использовал этот. Не уверен, что более эффективно.
- 1. Grunt - игнорировать скрытые файлы?
- 2. Игнорировать скрытые файлы с PHP
- 3. Как игнорировать скрытые файлы в функциях python?
- 4. Как игнорировать измененные/удаленные файлы в Mercurial
- 5. Игнорировать OSX скрытые «._» файлы от git repo
- 6. Игнорировать скрытые файлы с помощью regex
- 7. mercurial временно игнорировать файлы с версией
- 8. Как я могу заставить эту папку AppleScript игнорировать скрытые элементы?
- 9. mercurial игнорировать .zip-файлы в целом хранилище
- 10. игнорировать несуществующие файлы при слиянии в Mercurial
- 11. mercurial .hgignore - не будет игнорировать файлы
- 12. Как заставить веб-браузер игнорировать файлы cookie
- 13. Как я могу игнорировать все под папкой в Mercurial
- 14. Как заставить искра игнорировать отсутствующие входные файлы?
- 15. Как отменить все добавленные файлы в Mercurial
- 16. Как игнорировать файлы в mercurial, которые уже отслеживаются?
- 17. Переместить все файлы/каталоги/скрытые файлы в каталог, но игнорировать каталог назначения?
- 18. Как я могу забыть все файлы .DS_STORE в репозитории Mercurial?
- 19. Игнорировать все файлы, кроме одного
- 20. Исключая все скрытые файлы с .dockerignore
- 21. Заставить Internet Explorer игнорировать кешированные файлы
- 22. Как игнорировать все файлы, но не подпапки
- 23. Как игнорировать скрытые каталоги в Android build.gradle
- 24. Как разрешить Mercurial игнорировать все, кроме файла * .cs?
- 25. Mercurial/.hgignore - Как игнорировать все, кроме содержимого папки?
- 26. Как заставить Inno Setup игнорировать скрытый атрибут при поиске файлов?
- 27. Mercurial игнорировать часть каталога
- 28. Как заставить div игнорировать?
- 29. игнорировать скрытые пустые текстовые поля
- 30. Как заставить TFS игнорировать все папки с определенным именем
Синтаксис будет что-то больше похоже на '\ .. *' но это очень подозрительно, что вы описываете, имеющие все файлы с точкой и без. Обычно у вас не было бы точечных файлов в репо. Какие файлы вы отслеживаете? ('hg manifest') – gavinb
Это, к сожалению, пока не сработало. Я немного преувеличивал, когда говорил, что есть файлы точек во всем мире, но в нескольких каталогах каждый файл имеет эквивалент в виде точечного файла. Я отредактировал .hgignore с вашим синтаксисом, выполнил 'hg addremove' и сделал фиксацию, и они все еще находятся в моем репозитории. – 2010-03-07 04:59:11
Синтаксис зависит от того, используете ли вы глобальный или повторный синтаксис (например, строку формы «синтаксис: re' над директивой). Но '. *' - правильный синтаксис glob. Если файлы уже зафиксированы, вам придется удалить их отдельно (или с помощью 'hg rm. *'), И addremove не сделает этого для вас. – 2010-03-07 05:06:00