Как я могу найти сообщение коммита на GitHub?


328

Не в Git-репозитории , а скорее в GitHub, в частности - как мне искать только сообщения коммитов определенного репозитория / ветви?


3
Является ли репо публичным или частным?

2
Как насчет поиска сообщений коммита во всех вилках? Попытка избежать повторного изобретения колеса, когда в главном хранилище более 100+ вилок!
Даниэль Соколовский

Какие-нибудь изменения с тех пор?
Павел Шимерда

Я хочу искать коммиты в сети
frumbert

Ответы:


68

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

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

введите описание изображения здесь GIF-изображение с https://github.com/blog/2299-search-commit-messages


Я получаю ошибку разрешения при поиске частного репозитория, к которому у меня есть права на чтение / запись.
anon58192932

1
Я смотрю в течение пяти минут, и я не могу понять, куда мышь уходит после того, как она уменьшается и вправо.
Кевин Крумвиде,

1
@KevinKrumwiede, вероятно, с кнопкой «остановить запись», ха-ха
Кори Коул

Я сдался и использую "git log --all --grep = searhterm"
Эдвин Эванс

206

Раньше вы могли это делать, но 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.

143
какого черта они удалили это? Это действительно полезная функция.
Джош Браун

1
Фактор Мистик: обычно достаточно I.want.spaces.in.this.string.
dbrower

11
Совет опустите -gфлаг для наиболее распространенных случаев использования. Я не слишком углубился в это, но с -gпоиском, кажется, вернулся только один месяц. git log -g --grep=fixв то время как в developфилиале репо, который имеет ~ 8000 коммитов, охватывающих два года, он уходит только 2 февраля.
Дан Даскалеску

1
@DanDascalescu Странно, я смог найти коммиты, возвращающиеся по крайней мере на 5 месяцев с -gфлагом.
Хрустящий

134

Обновление (2017/01/05):

GitHub опубликовал обновление, которое позволяет вам теперь искать в сообщениях коммитов из их пользовательского интерфейса. Смотрите сообщение в блоге для получения дополнительной информации.


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

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

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


7
+1 Вы сэкономили мне бесполезное время в GitHub, размышляя о том, как добиться того, что, как я предполагал, было бы очевидной частью функциональности. Так что теперь мы должны локально клонировать репо в grep через командную строку. Боже, это прогресс, а ?! ;)
McNab

68
Даже их расширенный поиск в веб-интерфейсе не позволяет выполнять поиск по наиболее важному полю - фактическому сообщению о фиксации. Это абсолютно нелепо ИМО. Github соберись!
Брэд Томас,

22
Да. Забудьте тот факт, что они создали веб-сервис, который помогает революционизировать и популяризировать программное обеспечение с открытым исходным кодом, тот факт, что у них нет этой единственной функции, делает это полным обманом!
Джон Кейрнс

12
Спасибо, что нашли время опубликовать содержание своего дискурса с помощью GitHub в легко доступном для публики месте. Абсурдно, что для общественности это единственный способ получить такую ​​информацию - для GitHub крайне глупо не иметь средства отслеживания публичных проблем - но при такой глупости то, что вы сделали здесь, является полезным способом предотвращения сотен другие от тратить время на отправку в том же запросе. Спасибо за сотни человеко-часов продуктивности, которые вы сэкономили.
Марк Амери

1
Ну, не намного лучше, чем публичный трекер Атласиана, который полон 7-летних открытых выпусков с тысячами голосов ...
Askdesigners

58

Краткий ответ: вы не можете искать сообщения о коммитах непосредственно на сайте github.com. В настоящее время мы рекомендуем локальное git grepрешение, предложенное другими участниками этой темы.

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

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


2
+1. Кажется, это подтверждает то, что я думал, когда писал свой ответ : сообщение коммита не индексируется: вы работаете с индексированием git diff's(имеется в виду содержание коммитов, а не метаданные коммита)
VonC

Как насчет просто кнопки «Перейти к коммиту»? В настоящее время он доступен с URL - stackoverflow.com/a/12214817/817632, но нет интерфейса для него (не то, что я знаю). Вариант использования - найдите хеш коммита где-нибудь в bower.json вместо версии и хотите посмотреть, что именно делает этот коммит. Это сэкономит время на поиск в Google.
Ольга

44

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

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

введите описание изображения здесь

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

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

3
Это сработало для меня, но самый голосующий отказ не сделал.
Макдад

21

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

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

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


18
Это похоже на более «стандартный» вариант использования, когда дело доходит до поиска через репо. Специально для тех, кто знакомится с новым хранилищем с множеством коммитов. Они должны обязательно рассмотреть возможность добавления этого.
Хосе Браун

19

Вы можете сделать это с репозиториями, которые были просканированы Google (результаты варьируются от репозитория к репозиторию).

Искать во всех ветках всех сканируемых репозиториев «изменить лицензию»

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

Поищите основную ветку всех просканированных репозиториев по запросу «изменить лицензию»:

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

Искать в главной ветке всех просканированных репозиториев в Твиттере «изменение лицензии»

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

Поиск во всех ветках хранилища twitter / some_project по запросу «изменить лицензию»

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


4
@DZenBot, если это не публичное репо, то, скорее всего, у вас уже есть локальная копия для git grep, я просто поставлю этот ответ для тех, кто не хочет клонировать весь публичный репо, чтобы выяснить, когда были внесены какие-то изменения. Я использую его в основном для поиска коммитов, которые снимают поддержку старых версий gtk или когда лицензии меняются на gpl3
technosaurus

15

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

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

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


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

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

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

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

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

Эндрю Чолакян: Это потрясающе.

[...]

Тим Пиз: С индексацией исходного кода на ходу, это процесс самовосстановления.
У нас есть тот документ репозитория, который отслеживает последний проиндексированный коммит. Если мы пропустили, просто пропустили три коммита, где эти задания потерпели неудачу, следующий коммит, который приходит, мы все еще смотрим на разницу между предыдущим коммитом, который мы проиндексировали, и тем, который мы видим с этим новым толчком.
Вы делаете, git diffи вы получаете все файлы, которые были обновлены, удалены или добавлены. Вы можете просто сказать: «Хорошо, нам нужно удалить эти файлы. Нам нужно добавить эти файлы и все такое ». Это самовосстановление, и именно к этому подходу мы применили практически всю архитектуру.

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

Обратите внимание, что невозможно получить собственную локальную индексацию эластичного поиска для локального клона: см. « Поиск в git-репозитории с помощью ElasticSearch »

Но для конкретного репо проще всего его клонировать и сделать:

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

(Дополнительные параметры в « Как найти Git-репозиторий по сообщению коммита? »)


7

Поскольку это было удалено из GitHub, я использую это gitkдля Linux.

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

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

Панель поиска

Область действия - содержит, касаясь пути, добавление / удаление строки, изменение соответствия строки

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

Поля поиска - Все поля / Заголовок / Комментарии / Коммиттер



4

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

#!/bin/sh
for sha1 in $(git rev-list HEAD -i --grep="$1"); 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, открытые в вашем браузере. (Имейте в виду, что если ваш поисковый запрос появляется в сотнях коммитов, это может привести к сбою в работе вашего браузера и на некоторое время поглотит процессор вашего ПК.)


0

Начиная с середины 2019 года, просто введите все, что вы хотите найти, в верхнем левом окне поиска и нажмите «Подтвердить».

введите описание изображения здесь

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.