Как искать сообщение фиксации на GitHub?

Не в репо Git, а GitHub в частности-как искать только сообщения фиксации определенного РЕПО/ветви?

11 ответов


С 2017 года это функциональность, включенная в сам GitHub.

пример поиска, используемый ими, -repo:torvalds/linux merge:false crypto policy

enter image description here gif от https://github.com/blog/2299-search-commit-messages


раньше вы могли это сделать, но Github удалил эту функцию в какой-то момент в середине 2013 года. Чтобы достичь этого локально, вы можете сделать:

git log -g --grep=STRING

(используйте флаг-g, Если вы хотите искать другие ветви и болтающиеся коммиты.)

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones. 

обновление (2017/01/05):
Github опубликовал обновление, которое теперь позволяет выполнять поиск в сообщениях фиксации из их пользовательского интерфейса. См.блоге для получения дополнительной информации.


У меня был тот же вопрос и связался с кем-то @Github вчера:

поскольку они переключили свою поисковую систему на ElasticSearch, невозможно искать сообщения фиксации с помощью пользовательского интерфейса Github. Но эта функция находится в команде список желаний.

к сожалению, сейчас нет даты выпуска этой функции.


короткий ответ, вы не можете искать сообщения фиксации непосредственно на github.com веб-сайт. На данный момент мы рекомендуем местным git grep решение другие в этой теме предложили.

в какой-то момент времени GitHub предложил git grep поиск стиля по сообщениям фиксации для одного репозитория. К сожалению, этот подход выявил отказ в обслуживании, который может сделать файловый сервер недоступным. По этой причине мы удалили git grep поиск.

текущая оценки задней части конверта помещают количество коммитов в GitHub где-то около отметки 80 миллиардов. Хотя инженеры Google смеются за нашими спинами, это довольно большое количество документов для хранения в ElasticSearch. Мы хотели бы сделать этот набор данных для поиска, но это не тривиальный проект.


Это было удалено из GitHub. Я использую:

$git log --all --oneline | grep "search query"

enter image description here

вы также можете фильтровать по автору:

$git log --all --oneline --author=rickhanlonii | grep "search query"

со страницы справки на поиск кода Кажется, что это не возможно.

вы можете искать текст в своем РЕПО, включая возможность выбора файлов или путей для поиска, но вы не можете указать, что вы хотите искать в коммитах.

может быть предложите им это?


вы можете сделать это с РЕПО, которые были обысканы google (результаты варьируются от РЕПО к РЕПО)

поиск всех ветвей всех обходных репозиториев для "изменить лицензию"

сайт "изменить лицензию":https://github.com/*/* / commits

поиск главной ветви всех обходных репозиториев для "изменить лицензию"

"изменить лицензию " сайт:https://github.com/*/* / commits / master

Поиск master ветви всех обходных Twitter РЕПО для "изменить лицензию"

сайт "изменить лицензию":https://github.com/twitter/* / commits / master

поиск всех ветвей Twitter / some_project РЕПО для "изменить лицензию"

сайт"изменить лицензию":https://github.com/twitter/some_project/commits


Обновление Январь 2017 (два года спустя):

теперь вы можете искать сообщения! (все еще только в главной ветви)

https://cloud.githubusercontent.com/assets/1387653/21622772/61a5c7a6-d1bc-11e6-809d-134936a4ac05.gif


февраль 2015: не уверен, что это возможно, учитывая текущую базу инфраструктуры поиска на Elasticsearch (введено в январе).

В качестве ответа " рисунок из заслуживающего доверия и / или официального источники", вот Ан интервью сделано с людьми GitHub, ответственными за введение Elasticsearch в GitHub (август 2013 года)

Тим Пиз: у нас есть два типа документов в один файл исходного кода и другой репозиторий. Как работает git, у вас есть коммиты, и у вас есть ветвь для каждого коммита. Документы репозитория отслеживают самую последнюю фиксацию для этого конкретного репозитория, который был индексированный. Когда пользователь нажимает новую фиксацию до Github, мы затем вытаскиваем этот документ репозитория из elasticsearch. Затем мы видим самую последнюю индексированную фиксацию, а затем получаем список всех файлов, которые были изменены, добавлены или удалены между этим последним нажатием и тем, что мы ранее индексировали. Тогда мы можем пойти дальше и просто обновить те документы, которые были изменены. Нам не нужно переиндексировать все дерево исходного кода каждый раз, когда кто-то нажимает.

Андрей Чолакян:Итак, вы, ребята, только индексируете, я полагаю, главную ветвь.

Тим Пиз: Правильно. Это всего лишь глава главной ветви, которую вы собираетесь получить, и все же это много данных, два миллиарда документов, 30 терабайт.

Андрей Чолакян: это потрясающе огромный.

[...]

Tim Pease: с индексированием исходного кода на push, это процесс самоисцеления.
Мы этого репозитория документ, который отслеживает последнюю индексированную фиксацию. Если мы пропустили, просто пропустите Три коммита, где эти задания терпят неудачу, следующий коммит, который входит, мы все еще смотрим на разницу между предыдущим коммитом, который мы индексировали, и тем, который мы видим с этим новым толчком.
Вы git diff и вы получаете все файлы, которые были обновлены, удалены или добавлены. Вы можете просто сказать: "Хорошо, нам нужно удалить эти файлы. Нам нужно добавить эти файлы, и все такое.- Это самоисцеление . и это подход, который мы приняли практически со всей архитектурой.

Это все значит не все отделения все РЕПО будет индексироваться с этим подходом.
Глобальный поиск сообщений фиксации пока недоступен.
И Тим Пиз сам подтверждает сообщения не индексируются.

обратите внимание, что не невозможно получить собственный Elasticsearch local индексирование локального клона: см. "Поиск репозитория git с помощью ElasticSearch"

но для конкретного РЕПО проще всего клонировать его и сделать:

git log --all --grep='my search'

(больше вариантов на "как искать репозиторий Git по коммиту?")


поскольку это было удалено из Github, я использовал gitk в Linux для этого.

из терминала перейдите в свой репозиторий и введите gitk

в середине gui есть окно поиска. Он обеспечивает хороший выбор фильтров:

search bar

область, содержащая, трогательные пути, добавление / удаление строки, изменение соответствия строк

тип соответствия-точный / IgnCase / Regexp

поля поиска-все поля / заголовок / комментарии / Committer


Это хорошо работает изнутри eclipse, пока github не добавит функцию:

enter image description here

https://wiki.eclipse.org/EGit/User_Guide#Searching_for_commits


если вы работаете над Ubuntu (или, возможно, другими ОС Unix) и имеете локальную версию РЕПО, вы можете попробовать этот грубый сценарий оболочки, который я написал, чтобы открыть страницы GitHub для всех коммитов, соответствующих вашему поисковому термину в новых вкладках в вашем браузере по умолчанию:

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep=""); do
    python -mwebbrowser https://github.com/RepoOwnerUserName/RepoName/commit/$sha1 >/dev/null 2>/dev/null
done

просто заменить https://github.com/RepoOwnerUserName/RepoName/ с фактическим URL-адресом GitHub вашего РЕПО сохраните скрипт где-нибудь (например, как githubsearch.sh, сделайте его исполняемым (chmod +x githubsearch.sh), а затем добавьте следующий псевдоним ~/.bashrc файл:

alias githubsearch='/path/to/githubsearch.sh'

затем, из любой точки вашего git-РЕПО, просто сделайте это на терминале:

githubsearch "what you want to search for"

и любые коммиты, которые соответствуют вашему (без учета регистра) поисковому термину, будут иметь соответствующие страницы GitHub, открытые в вашем браузере. (Имейте в виду, что если ваш поисковый запрос появляется в сотнях коммитов, это может привести к сбою Вашего браузера и съесть процессор вашего ПК на некоторое время.)

Я только проверил это на Ubuntu и не знаю достаточно о сценариях оболочки, чтобы знать будет ли это работать на других ОС на базе Unix-особенно я не знаю, является ли что-либо, что я использовал здесь, специфичным для Bash. Не стесняйтесь комментировать или редактировать, чтобы добавить информацию о совместимости.