Как ограничить журнал Git/Mercurial фиксациями, журналы которых содержат хотя бы одну из двух строк?
Есть ли способ, где я могу отправить два варианта для команд git/Mercurial?
Я хочу найти в истории git-репозитория и Mercurial-репозитория конкретное слово, скажем "commit". Тем не менее, я не уверен, как это написано в сообщении коммита "commit" или "com-mit"? Итак, я хочу отправить эти параметры с помощью команды. Я знаю, что если я хочу искать, я буду печатать:
В мерзавце:
git log --grep="commit"
В ртутных:
hg log --keyword commit
Любая помощь?
1 ответ
Самый гибкий способ сделать это с Mercurial - это использовать revsets. Для вашего примера:
hg log -r 'grep("\\b(com-mit|commit)\\b")'
В синтаксисе регулярных выражений Python \b
указывает на границу слова, и обратная косая черта должна быть экранирована. (a|b)
Синтаксис используется для соответствия одного или другого. Одиночные кавычки, окружающие аргумент, присутствуют, чтобы оболочка не интерпретировала метасимволы сама.
Вы также можете упростить регулярное выражение, комбинируя revsets с and
:
hg log -r 'grep("\\bcom-mit\\b") or grep("\\bcommit\\b")'
Если вам не нужно точно подбирать слова (например, если вы хотите сопоставить слова "committer" и "commit", а не просто "commit"), вы можете использовать ключевое слово revsets:
hg log -r 'keyword("com-mit") or keyword("commit")'
Используя and
вместо or
вы можете найти ревизии, которые соответствуют обеим, а не одной из них; также вы можете использовать reverse(...)
перечислить совпадения в обратном порядке, например:
hg log -r 'reverse(keyword("com-mit") or keyword("commit"))'