Як я можу шукати повідомлення про фіксацію на 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 = searchhterm"
Едвін Еванс

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, цікавившись, як досягти того, що, як я вважав, було б очевидною функціональністю. Отже, тепер нам доведеться локально клонувати репо, щоб перейти через командний рядок. Боже, це прогрес? ;)
McNab

68
Навіть їх розширений пошук у веб-інтерфейсі не дозволяє здійснювати пошук за найважливішим полем - повідомленням фактичної фіксації. Це абсолютно смішно ІМО. Github збери свій вчинок разом!
Бред Томас

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

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

1
Ну не набагато краще, ніж публічний трекер Атласа, який сповнений 7-річних відкритих випусків із 1000 нагород ...
Askdesigners

58

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

В один момент часу GitHub запропонував git grepпошук стилю за повідомленнями фіксування для одного сховища. На жаль, такий підхід виявив відмову в обслуговуванні, що може зробити файловий сервер недоступним. З цієї причини ми зняли git grepпошук.

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


2
+1. Це, мабуть, підтверджує те, що я думав, написавши свою відповідь : повідомлення про фіксацію не індексується: ви працюєте з індексуванням git diff's( маючи на увазі зміст
комітетів

Як щодо кнопки "стрибнути на фіксацію"? На даний момент він доступний з URL - stackoverflow.com/a/12214817/817632, але для нього немає інтерфейсу (не те, що я знаю). Використовуйте регістр - знайдіть хеш комітів десь у bower.json замість версії та хочете побачити, що саме робить цей коміт. Це дозволить заощадити деякий час на гугле.
Ольга

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/*/*/commissions

Шукати головну гілку всіх сканованих сховищ для "змінити ліцензію":

Сайт "зміни ліцензії": https://github.com/*/*/commits/master

Пошук головного відділення всіх сканованих сховищ twitter для "зміни ліцензії"

Сайт "зміни ліцензії": https://github.com/twitter/*/commits/master

Шукайте у всіх відділеннях сховища twitter / some_project для "зміни ліцензії"

Сайт "зміни ліцензії": https://github.com/twitter/some_project/commissions


4
@DZenBot якщо це не публічне репо, тоді ви, ймовірно, вже маєте локальну копію, щоб git grep, я просто поставив цю відповідь для тих, хто не хоче клонувати цілий Public Repo, щоб зрозуміти, коли були внесені якісь зміни. Я використовую його здебільшого для пошуку комітетів, які видаляють підтримку старих версій 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, ми витягуємо цей репозиторій документ із еластичного пошуку. Потім ми бачимо останню індексовану комісію, а потім отримуємо список усіх файлів, які були змінені або додані або видалені між цим останнім натисканням та тим, що ми раніше індексували. Тоді ми можемо продовжувати та просто оновлювати ті документи, які були змінені. Нам не потрібно повторно індексувати все дерево вихідних кодів кожного разу, коли хтось натискає.

Андрій Чолакян: Отже, ви, хлопці, лише індексуєте, я припускаю, головний відділ.

Тім Піс: Правильно. Тільки голова головного відділення ви збираєтеся туди потрапити, і це ще багато даних, два мільярди документів, 30 терабайт.

Ендрю Чолакян: Це надзвичайно величезно.

[...]

Тім Піз: Якщо індексувати вихідний код під час натискання, це процес самолікування.
У нас є той документ у сховищі, який відстежує останню індексовану комісію. Якщо ми пропустили, просто трапимо три коміти, коли ці завдання не виходять, наступна комісія, яка входить, ми все ще переглядаємо різницю між попередньою комісією, яку ми індексували, і тією, яку ми бачимо з цим новим натиском.
Ви робите це, git diffі ви отримуєте всі файли, які були оновлені, видалені або додані. Ви можете просто сказати: «Гаразд, нам потрібно видалити ці файли. Нам потрібно додати ці файли, і все це. " Це самолікування, і це такий підхід, який ми застосували майже з усієї архітектури.

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

Зауважте, що неможливо отримати власну еластичну пошукову локальну індексацію локального клону: див. " Пошук сховища git за допомогою ElasticSearch "

Але для конкретного репо, найпростіше залишати його клонувати та робити:

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

(Додаткові параметри в розділі " Як шукати сховище Git за допомогою повідомлення "


7

Оскільки це було видалено з GitHub, я використовував це gitkв Linux для цього.

З терміналу перейдіть до вашого сховища та введіть gitk.

В середині GUI є вікно пошуку. Він забезпечує хороший вибір фільтрів:

Рядок пошуку

Область застосування - містить, торкаючись контурів, додаючи / видаляючи рядок, змінюючи відповідність рядків

Тип відповідності - Exact / 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.