Как ограничить журнал 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"))'
Другие вопросы по тегам