У меня есть временные файлы с именами:

#myfile#
.#anotherfile
./some/dir/#myfile#
./somewhere/.#anotherfile

Я попытался добавить (для меня) очевидный шаблон, см. Команду ниже

cat >> .gitignore <<EOF
#.*
.*#.*
EOF

Но в git status все еще перечислены файлы.

Я понял, что символ решетки '#' - это символ комментария, поэтому я попытался процитировать его и добавил:

\#.*
.*\#.*

Но это тоже не сработало.

Его поиски не дали мне ответа, но заставили меня понять, что git не использует нормальный синтаксис регулярных выражений, поэтому мои предположения не действительны для git.

Некоторые хорошие поиски были

В моем .gitignore теперь есть:

\#*#
.\#*#

Теперь у меня есть только один шаблон, который нужно исправить:

./somewhere/.#anotherfile
git
0
PatS 18 Сен 2018 в 20:33

2 ответа

Лучший ответ

@torek, спасибо за ответ. Я пробовал просто *#*, но это не сработало.

Путем экспериментов я обнаружил, что работает следующее:

**.\#*   => handles .#tempfile and sub/dirs/.#tempfile, .#tempfile#, sub/dir/.#tempfile#
**\#*   => handles #tempfile, sub/dirs/#tempfile, and #tempfile#, sub/dir/#tempfile#

Я аннотировал шаблон, чтобы показать файлы, которым он соответствует, но очевидно, что => text не будет в файле .gitignore. Для меня это нормально, так что это решает мой вопрос.

Для проверки я использовал следующий .gitignore.

**.\#*
**\#*

С этими файлами:

touch '.#file'
touch '.#file#'
touch '#file'
touch '#file#'
touch 'commit#file'
touch 'bin/.#file'
touch 'bin/.#file#'
touch 'bin/#file'
touch 'bin/#file#'
touch 'bin/commit#file'

При тестировании все файлы были отфильтрованы.
ПРИМЕЧАНИЕ. Файлы commit # file и bin / commit # file также были отфильтрованы. Я хотел этого, но другие не могли.

Протестировано с помощью git-bash (v 2.17.1 для Windows) и git (1.8.x.x) в Linux.

Я создал небольшой тестовый репозиторий на github, чтобы показать это. Видеть https://github.com/steranka/git-ignore-test

0
PatS 19 Сен 2018 в 16:26

Правый глобус - это *#*, поскольку * соответствует нулю или более любых символов (в компоненте имени).

Вам понадобится обратная косая черта тогда и только тогда, когда # будет первым символом. Поскольку это не так, вы этого не сделаете. (" Если бы это было так, то могло бы быть; если бы это было так, то было бы; но так как это не так "нет, это не так". ) То есть, если вы хотите игнорировать такие файлы, как #ignoreme и #thistoo, но не игнорировать {{X3} }, вам нужно #*, а поскольку #* начинается с #, вам нужно будет записать это как \#*.

(Кроме того: средство сопоставления шаблонов игнорирования Git сознательно не подчиняется поведению звездочка не соответствует ведущей точке , т. Е. *foo соответствует .foo, даже если sh / bash *foo не соответствует match .foo. То есть Git использует POSIX {{X4} } rules, как если бы FNM_PERIOD не установлен.)

0
torek 18 Сен 2018 в 18:18