Не в Git-репозитории , а скорее в GitHub, в частности - как мне искать только сообщения коммитов определенного репозитория / ветви?
Не в Git-репозитории , а скорее в GitHub, в частности - как мне искать только сообщения коммитов определенного репозитория / ветви?
Ответы:
С 2017 года это функциональность, включенная в сам GitHub .
Используемый ими пример поиска repo:torvalds/linux merge:false crypto policy
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.
-g
флаг для наиболее распространенных случаев использования. Я не слишком углубился в это, но с -g
поиском, кажется, вернулся только один месяц. git log -g --grep=fix
в то время как в develop
филиале репо, который имеет ~ 8000 коммитов, охватывающих два года, он уходит только 2 февраля.
-g
флагом.
Обновление (2017/01/05):
GitHub опубликовал обновление, которое позволяет вам теперь искать в сообщениях коммитов из их пользовательского интерфейса. Смотрите сообщение в блоге для получения дополнительной информации.
У меня был тот же вопрос и я вчера связался с кем-то из GitHub:
Поскольку они переключили свою поисковую систему на Elasticsearch, поиск сообщений о коммитах с помощью пользовательского интерфейса GitHub невозможен. Но эта особенность есть в списке пожеланий команды.
К сожалению, сейчас нет даты выпуска этой функции.
Краткий ответ: вы не можете искать сообщения о коммитах непосредственно на сайте github.com. В настоящее время мы рекомендуем локальное git grep
решение, предложенное другими участниками этой темы.
В какой-то момент GitHub действительно предлагал git grep
стиль поиска по сообщениям фиксации для одного репозитория. К сожалению, этот подход выявил отказ в обслуживании, который мог сделать файловый сервер недоступным. По этой причине мы удалили git grep
поиск.
Текущие оценки за пределами конверта устанавливают число коммитов в GitHub где-то около 80 миллиардов. Хотя инженеры Google смеются за нашими спинами, это довольно большое количество документов для хранения в ElasticSearch. Мы хотели бы сделать этот набор данных доступным для поиска, но это не тривиальный проект.
git diff's
(имеется в виду содержание коммитов, а не метаданные коммита)
Это было удалено из GitHub. Я использую:
$git log --all --oneline | grep "search query"
Вы также можете отфильтровать по автору:
$git log --all --oneline --author=rickhanlonii | grep "search query"
Со страницы помощи на поиску кода кажется, что это пока невозможно.
Вы можете искать текст в своем хранилище, включая возможность выбирать файлы или пути для поиска, но вы не можете указать, что вы хотите искать в коммитах.
Может предложить им это ?
Вы можете сделать это с репозиториями, которые были просканированы Google (результаты варьируются от репозитория к репозиторию).
сайт "изменить лицензию": https://github.com/*/*/commits
сайт "изменить лицензию": https://github.com/*/*/commits/master
сайт "изменить лицензию": https://github.com/twitter/*/commits/master
сайт "изменить лицензию": https://github.com/twitter/some_project/commits
Обновление января 2017 года (два года спустя):
Теперь вы можете искать сообщения коммитов ! (пока только в мастер ветке)
Февраль 2015: Не уверен, что это когда-либо будет возможно, учитывая текущую базу поисковой инфраструктуры Elasticsearch (введена в январе 2013 г. ).
В качестве ответа «взято из достоверных и / или официальных источников», здесь приводится интервью с людьми из GitHub, отвечающими за представление Elasticsearch на GitHub (август 2013 г.)
Тим Пиз : У нас есть два типа документов: один - файл исходного кода, а другой - хранилище. Git работает так, что у вас есть коммиты и у вас есть ветка для каждого коммита. Документы репозитория отслеживают самую последнюю фиксацию для того конкретного репозитория, который был проиндексирован. Когда пользователь отправляет новый коммит в Github, мы извлекаем этот документ репозитория изasticsearch. Затем мы видим последний индексируемый коммит и затем получаем список всех файлов, которые были изменены, добавлены или удалены между этим недавним нажатием и тем, что мы ранее проиндексировали. Тогда мы можем пойти дальше и просто обновить те документы, которые были изменены. Нам не нужно переиндексировать все дерево исходного кода каждый раз, когда кто-то нажимает.
Эндрю Чолакян: Итак, вы, ребята, только указатель, я полагаю, основная ветвь.
Тим Пиз: Верно. Вы попадете туда только в главу ветки master, и все же это много данных, два миллиарда документов, 30 терабайт.
Эндрю Чолакян: Это потрясающе.
[...]
Тим Пиз: С индексацией исходного кода на ходу, это процесс самовосстановления.
У нас есть тот документ репозитория, который отслеживает последний проиндексированный коммит. Если мы пропустили, просто пропустили три коммита, где эти задания потерпели неудачу, следующий коммит, который приходит, мы все еще смотрим на разницу между предыдущим коммитом, который мы проиндексировали, и тем, который мы видим с этим новым толчком.
Вы делаете,git diff
и вы получаете все файлы, которые были обновлены, удалены или добавлены. Вы можете просто сказать: «Хорошо, нам нужно удалить эти файлы. Нам нужно добавить эти файлы и все такое ». Это самовосстановление, и именно к этому подходу мы применили практически всю архитектуру.
Это означает, что не все ветви всех репо будут проиндексированы с таким подходом.
Поиск сообщений о глобальной фиксации пока недоступен.
И сам Тим Пиз подтверждает, что сообщения о коммитах не индексируются .
Обратите внимание, что невозможно получить собственную локальную индексацию эластичного поиска для локального клона: см. « Поиск в git-репозитории с помощью ElasticSearch »
Но для конкретного репо проще всего его клонировать и сделать:
git log --all --grep='my search'
(Дополнительные параметры в « Как найти Git-репозиторий по сообщению коммита? »)
Поскольку это было удалено из GitHub, я использую это gitk
для Linux.
Из терминала перейдите в свой репозиторий и введите gitk
.
В середине графического интерфейса есть окно поиска. Это обеспечивает хороший выбор фильтров:
Область действия - содержит, касаясь пути, добавление / удаление строки, изменение соответствия строки
Тип соответствия - Точный / IgnCase / Regexp
Поля поиска - Все поля / Заголовок / Комментарии / Коммиттер
Это хорошо работает в Eclipse , пока GitHub не добавит функцию:
Если у вас есть локальная версия репозитория, вы можете попробовать этот грубый сценарий оболочки, который я написал, чтобы открыть страницы 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, открытые в вашем браузере. (Имейте в виду, что если ваш поисковый запрос появляется в сотнях коммитов, это может привести к сбою в работе вашего браузера и на некоторое время поглотит процессор вашего ПК.)