Каков шаблон для .gitignore игнорировать временные имена файлов с # в них - PullRequest
0 голосов
/ 18 сентября 2018

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

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

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

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

, но состояние git по-прежнемуперечисляет файлы.

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

\#.*
.*\#.*

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

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

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

Мой .gitignore теперь имеет:

\#*#
.\#*#

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

./somewhere/.#anotherfile

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

@ Торек, спасибо за ваш ответ.Я пытался просто *#*, но это не сработало.

В результате экспериментов я нашел следующее:

**.\#*   => 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.xx) в Linux.

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

0 голосов
/ 18 сентября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...