Не в репозитории Git, а скорее в GitHub в частности - как мне искать только сообщения фиксации конкретного репо/ветки?
Как искать сообщение о совершении на GitHub?
Ответ 1
По состоянию на 2017 г. это функциональность, включенная в сам GitHub.
Используемый ими пример поиска repo:torvalds/linux merge:false crypto policy
gif from https://github.com/blog/2299-search-commit-messages
Ответ 2
Вы могли это сделать, но 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.
Ответ 3
Обновление (2017/01/05):
Github опубликовал обновление, которое позволяет вам теперь искать в сообщениях коммитов из их пользовательского интерфейса. Смотрите сообщение в блоге для получения дополнительной информации.
У меня был тот же вопрос, и я вчера связался с кем-то @Github:
Поскольку они переключили свою поисковую систему на ElasticSearch, поиск сообщений о коммитах с помощью пользовательского интерфейса Github оказался невозможным. Но эта функция есть в списке пожеланий команды.
К сожалению, сейчас нет даты выпуска этой функции.
Ответ 4
Короткий ответ: вы не можете искать сообщения о фиксации непосредственно на сайте github.com. В настоящее время мы рекомендуем локальное решение git grep
, предложенное другими в этом потоке.
В один момент времени GitHub предлагал поиск стиля git grep
по сообщениям фиксации для одного репозитория. К сожалению, этот подход выявил отказ в обслуживании, который может сделать файловый сервер недоступным. По этой причине мы удалили поиск git grep
.
Текущие оценки огибающей помещают количество коммитов в GitHub где-то около отметки 80 миллиардов. Хотя инженеры Google смеются за нашими спинами, это довольно большое количество документов для хранения в ElasticSearch. Мы хотели бы сделать этот набор данных доступным для поиска, но это не тривиальный проект.
Ответ 5
Это было удалено из GitHub. Я использую:
$git log --all --oneline | grep "search query"
Вы также можете фильтровать по автору:
$git log --all --oneline --author=rickhanlonii | grep "search query"
Ответ 6
Из справочной страницы кода поиска кажется, что это еще не возможно.
Вы можете искать текст в своем репо, в том числе возможность выбирать файлы или пути для поиска, но вы не можете указать, что вы хотите выполнить поиск в коммитах.
Может быть предложить это им?
Ответ 7
Вы можете сделать это с помощью репозиториев, которые были сканированы Google (результаты варьируются от репо к репо)
Искать все ветки всех обходных репозиториев для "лицензии на изменение"
"изменить лицензию": https://github.com/*/*/commits
Искать основную ветвь всех обследованных репозиториев для "лицензии на изменение"
"изменить лицензию": https://github.com/*/*/commits/master
Искать основную ветвь всех обследованных twitter-репозиций для "лицензии на изменение"
"изменить лицензию": https://github.com/twitter/*/commits/master
Искать все ветки twitter/some_project repo для "лицензии на изменение"
"изменить лицензию": https://github.com/twitter/some_project/commits
Ответ 8
Обновление января 2017 года (два года спустя):
Теперь вы можете искать сообщения о фиксации! (все еще только в главной ветке)
Февраль 2015: Не уверен, что это возможно, учитывая текущую базу инфраструктуры поиска на Elasticsearch (введено в январе 2013 г.).
В качестве ответа "из надежных и/или официальных источников", здесь приведено интервью проведенное с людьми GitHub, ответственными за введение Elasticsearch в GitHub (август 2013 г.)
Tim Pease: у нас есть два типа документов: один - это файл исходного кода, а другой один - это репозиторий. Способ, которым работает git, - это фиксация, и у вас есть ветвь для каждой фиксации. Документы репозитория отслеживают самую последнюю фиксацию для этого конкретного репозитория, который был проиндексирован. Когда пользователь нажимает новый коммит до Github, мы затем извлекаем этот документ репозитория из elasticsearch. Затем мы видим последнее проиндексированное сообщение, а затем получаем список всех файлов, которые были изменены или добавлены или удалены между этим недавним нажатием и тем, что мы предварительно проиндексировали. Затем мы можем продолжить и просто обновить те документы, которые были изменены. Нам не нужно повторно индексировать все дерево исходного кода каждый раз, когда кто-то нажимает.
Эндрю Холакян: Итак, вы, ребята, только индексируете, я предполагаю, ведущую ветвь.
Тим Пейз: Правильно. Его единственная глава ведущей ветки, которую вы собираетесь туда попасть, и все еще это много данных, два миллиарда документов, 30 терабайт.
Эндрю Холакян: Это ужасно огромно.
[...]
Tim Pease: с индексированием исходного кода на push, его процесс самовосстановления.
У нас есть этот документ репозитория, который отслеживает последнюю индексированную фиксацию. Если мы пропустили, просто пропустите три коммита, где эти задания терпят неудачу, следующая фиксация, которая приходит, все еще смотрела на разницу между предыдущей фиксацией, которую мы проиндексировали, и той, что видели с этим новым нажатием. Вы делаетеgit diff
, и вы получаете все файлы, которые были обновлены, удалены или добавлены. Вы можете просто сказать: "Хорошо, нам нужно удалить эти файлы. Нам нужно добавить эти файлы и все такое". Его самовосстановление и тот подход, который мы взяли с почти всей архитектурой.
Это означает, что не все ветки всего репо были бы проиндексированы с этим подходом.
Глобальный поиск сообщений о фиксации пока недоступен.
И Сам Тим Пиз подтверждает сообщения о фиксации не индексируются.
Обратите внимание, что невозможно получить локальную индексацию локального клонирования локального elasticsearch: см. " Поиск репозитория git с помощью ElasticSearch"
Но для конкретного репо проще всего клонировать его и делать:
git log --all --grep='my search'
(Дополнительные параметры в разделе Как выполнить поиск в репозитории git посредством сообщения фиксации?")
Ответ 9
Поскольку это было удалено из Github, я использовал gitk
в Linux для этого.
От терминала перейдите в свой репозиторий и введите gitk
В середине gui находится окно поиска. Он обеспечивает хороший выбор фильтров:
Сфера - содержащий, трогательные пути, добавление/удаление строки, изменение соответствия строк
Тип соответствия - точный /IgnCase/Regexp
Поля поиска - Все поля/Заголовок/Комментарии/Коммиттер
Ответ 10
Это хорошо работает из затмения, пока github не добавит эту функцию:
https://wiki.eclipse.org/EGit/User_Guide#Searching_for_commits
Ответ 11
Если вы работаете с Ubuntu (или, возможно, с другими ОС Unix) и имеете локальную версию репо, вы можете попробовать эту грубую оболочку script, которую я написал, чтобы открыть страницы 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, сохраните script где-нибудь (например, как 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 -конкретный. Не стесняйтесь комментировать или редактировать, чтобы добавить информацию о совместимости.
Ответ 12
Начиная с середины 2019 года, просто введите все, что вы хотите найти, в верхнем левом поле поиска и нажмите "Подтвердить".