¿Cómo puedo buscar un mensaje de confirmación en GitHub?

328

No en un repositorio Git , sino específicamente en GitHub : ¿cómo busco solo los mensajes de confirmación de un repositorio / rama específico?

ripper234
fuente
3
¿El repositorio es público o privado?
2
¿Qué tal buscar mensajes de confirmación en todos los tenedores? ¡Intentando evitar reinventar la rueda cuando el repositorio principal tiene más de 100 tenedores!
Daniel Sokolowski
¿Algún cambio desde entonces?
Pavel Šimerda
Quiero buscar las confirmaciones de red
frumbert

Respuestas:

68

A partir de 2017, es una funcionalidad incluida en GitHub .

La búsqueda de ejemplo utilizada por ellos es repo:torvalds/linux merge:false crypto policy

ingrese la descripción de la imagen aquí Imagen GIF de https://github.com/blog/2299-search-commit-messages

vartec
fuente
Recibo un error de permiso cuando busco en un repositorio privado al que tengo acceso de lectura / escritura.
anon58192932
1
Lo he estado observando durante cinco minutos y no puedo entender a dónde va el mouse después de que se aleja hacia la derecha.
Kevin Krumwiede
1
@KevinKrumwiede probablemente al botón "detener grabación" jaja
Corey Cole
Me di por vencido y usé "git log --all --grep = searhterm"
Edwin Evans
206

Solía ​​poder hacer esto, pero GitHub eliminó esta función en algún momento a mediados de 2013. Para lograr esto localmente, puede hacer:

git log -g --grep=STRING

(Use la -gbandera si desea buscar otras ramas y confirmaciones pendientes).

-g, --walk-reflogs
    Instead of walking the commit ancestry chain, walk reflog entries from
    the most recent one to older ones.
dsldsl
fuente
143
¿Por qué diablos lo quitaron? Esa es una característica realmente útil.
Josh Brown
1
Factor Mystic: I.want.spaces.in.this.string generalmente es suficiente.
dbrower
11
Consejo omita la -gbandera para los casos de uso más comunes. No he -ginvestigado demasiado en esto, pero con , la búsqueda parece retroceder solo un mes. git log -g --grep=fixmientras que en la developrama de un repositorio que tiene ~ 8000 compromisos que abarcan dos años, solo se remonta al 2 de febrero.
Dan Dascalescu
1
@DanDascalescu Extraño, pude encontrar compromisos que se remontan al menos 5 meses con la -gbandera.
Chrispy
134

Actualización (2017/01/05):

GitHub ha publicado una actualización que le permite ahora buscar dentro de los mensajes de confirmación desde su interfaz de usuario. Vea la publicación del blog para más información.


Tuve la misma pregunta y contacté a alguien con GitHub ayer:

Dado que cambiaron su motor de búsqueda a Elasticsearch, no es posible buscar mensajes de confirmación utilizando la interfaz de usuario de GitHub. Pero esa característica está en la lista de deseos del equipo.

Lamentablemente, no hay fecha de lanzamiento para esa función en este momento.

Oktopus
fuente
77
+1 Me has ahorrado tiempo infructuoso en GitHub preguntándome cómo lograr lo que supuse sería una funcionalidad obvia. Entonces ahora tenemos que clonar el repositorio localmente para grep a través de la línea de comando. Dios, eso es progreso, ¿eh? ;)
McNab
68
Incluso su búsqueda avanzada en la interfaz de usuario web no permite buscar en el campo más importante: el mensaje de confirmación real. Eso es absolutamente ridículo de la OMI. ¡Github actúa bien!
Brad Thomas
22
Si. Olvida el hecho de que han creado un servicio web que ayuda a revolucionar y popularizar el software de código abierto, ¡el hecho de que no tengan esta característica lo convierte en una farsa completa!
Jon Cairns
12
Gracias por tomarse el tiempo para publicar el contenido de su discurso con GitHub en un lugar público fácilmente localizable. Es absurdo que esta sea la única forma para que el público obtenga dicha información, es profundamente estúpido que GitHub no tenga un rastreador de problemas públicos, pero en presencia de tal estupidez, lo que ha hecho aquí es una forma útil de prevenir cientos de otros por perder el tiempo enviando la misma solicitud. Gracias por los cientos de horas hombre de productividad que ha ahorrado.
Mark Amery
1
Bueno, no mucho mejor que el rastreador pública de Atlasian, que está lleno de viejos problemas abiertos de 7 años con 1000 de upvotes ...
Askdesigners
58

La respuesta corta es que no puede buscar mensajes de confirmación directamente en github.com, el sitio web. Por el momento, recomendamos la git grepsolución local que otros en este hilo han propuesto.

En un momento dado, GitHub ofreció una git grepbúsqueda de estilo sobre los mensajes de confirmación para un único repositorio. Desafortunadamente, este enfoque expuso una denegación de servicio que podría hacer que un servidor de archivos fuera inaccesible. Por esta razón, eliminamos la git grepbúsqueda.

Las estimaciones actuales de la parte posterior del sobre ponen el número de confirmaciones en GitHub en algún lugar alrededor de la marca de 80 mil millones. Aunque los ingenieros de Google se ríen a nuestras espaldas, este es un número bastante grande de documentos para almacenar en ElasticSearch. Nos encantaría poder hacer búsquedas en este conjunto de datos, pero no es un proyecto trivial.

TwP
fuente
2
+1. Eso parece confirmar lo que pensé al escribir mi respuesta : el mensaje de confirmación no está indexado: está trabajando con la indexación git diff's(es decir, el contenido de las confirmaciones, no los metadatos de confirmación)
VonC
¿Qué tal solo el botón "saltar para confirmar"? Actualmente es accesible desde URL - stackoverflow.com/a/12214817/817632 pero no hay una interfaz para ello (no que yo sepa). Caso de uso: busque un hash de confirmación en algún lugar de bower.json en lugar de la versión y quiera ver qué hace exactamente esta confirmación. Ahorrará algo de tiempo buscando en Google.
Olga
44

Esto fue eliminado de GitHub. Yo suelo:

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

ingrese la descripción de la imagen aquí

También puede filtrar por autor:

$git log --all --oneline --author=rickhanlonii | grep "search query"
Rick Hanlon II
fuente
3
Esto funcionó para mí, pero la respuesta más votada no.
makdad
21

Desde la página de ayuda sobre la búsqueda de código , parece que esto aún no es posible.

Puede buscar texto en su repositorio, incluida la capacidad de elegir archivos o rutas para buscar, pero no puede especificar que desea buscar en confirmaciones.

¿Quizás les sugiera esto ?

Jon Cairns
fuente
18
Este parece ser el caso de uso más "predeterminado" cuando se trata de buscar en un repositorio. Especialmente para alguien que conoce un nuevo repositorio con toneladas de confirmaciones. Definitivamente deberían considerar agregar esto.
Jose Browne
19

Puede hacerlo con los repositorios que Google ha rastreado (los resultados varían de un repositorio a otro).

Buscar "cambiar licencia" en todas las sucursales de todos los repositorios rastreados

Sitio de "cambio de licencia": https://github.com/*/*/commits

Busque la rama maestra de todos los repositorios rastreados para "cambiar licencia":

Sitio de "cambio de licencia": https://github.com/*/*/commits/master

Busque la rama maestra de todos los repositorios de Twitter rastreados para "cambiar licencia"

Sitio de "cambio de licencia": https://github.com/twitter/*/commits/master

Buscar "cambiar licencia" en todas las ramas del repositorio de twitter / some_project

Sitio de "cambio de licencia": https://github.com/twitter/some_project/commits

technosaurus
fuente
44
@DZenBot si no es un repositorio público, entonces es probable que ya tenga una copia local para git grep, solo pongo esta respuesta para aquellos que no quieren clonar un repositorio público completo para descubrir cuándo se realizó algún cambio. Lo utilizo sobre todo para encontrar confirmaciones de que el apoyo de eliminación para las versiones GTK mayores o cuando las licencias cambian a GPL3
Technosaurus
15

Actualización de enero de 2017 (dos años después):

¡Ahora puede buscar mensajes de confirmación ! (todavía solo en la rama maestra)

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


Febrero de 2015: no estoy seguro de que eso sea posible, teniendo en cuenta la base actual de infraestructura de búsqueda en Elasticsearch (presentada en enero de 2013 ).

Como respuesta "a partir de fuentes confiables y / o oficiales", aquí hay una entrevista realizada con las personas de GitHub a cargo de presentar Elasticsearch en GitHub (agosto de 2013)

Tim Pease : Tenemos dos tipos de documentos: uno es un archivo de código fuente y el otro es un repositorio. La forma en que funciona git es que tiene commits y tiene una rama para cada commit. Los documentos del repositorio realizan un seguimiento de la confirmación más reciente para ese repositorio particular que ha sido indexado. Cuando un usuario envía una nueva confirmación a Github, extraemos ese documento del repositorio de elasticsearch. Luego vemos la confirmación indexada más recientemente y luego obtenemos una lista de todos los archivos que se han modificado, agregado o eliminado entre este envío reciente y lo que hemos indexado previamente. Entonces podemos seguir adelante y simplemente actualizar los documentos que han sido modificados. No tenemos que volver a indexar todo el árbol de código fuente cada vez que alguien empuja.

Andrew Cholakian: Entonces, ustedes solo indexan, supongo, la rama maestra.

Tim Pease: Correcto. Es solo el jefe de la rama maestra lo que va a ingresar allí y aún así son muchos datos, dos mil millones de documentos, 30 terabytes.

Andrew Cholakian: Eso es asombrosamente enorme.

[...]

Tim Pease: con el código fuente de indexación al pulsar, es un proceso de autocuración.
Tenemos ese documento de repositorio que realiza un seguimiento de la última confirmación indexada. Si fallamos, simplemente perdemos tres confirmaciones donde fallan esos trabajos, la próxima confirmación que viene, todavía estamos viendo la diferencia entre la confirmación anterior que indexamos y la que estamos viendo con este nuevo impulso.
Haces git diffy obtienes todos los archivos que se han actualizado, eliminado o agregado. Simplemente puede decir: "Bien, necesitamos eliminar estos archivos. Necesitamos agregar estos archivos y todo eso ". Es autocuración y ese es el enfoque que hemos adoptado con casi toda la arquitectura.

Todo eso significa que no todas las ramas de todo el repositorio se indexarían con ese enfoque.
Una búsqueda de mensaje de confirmación global no está disponible por ahora.
Y el propio Tim Pease confirma que los mensajes de confirmación no están indexados .

Tenga en cuenta que no es imposible obtener la propia indexación local de ElasticSearch de un clon local: consulte " Búsqueda en un repositorio git con ElasticSearch "

Pero para un repositorio específico, lo más fácil es clonarlo y hacer un:

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

(Más opciones en " ¿Cómo buscar un repositorio Git por mensaje de confirmación? ")

VonC
fuente
7

Como esto se ha eliminado de GitHub, he estado usando gitkLinux para hacer esto.

Desde la terminal, vaya a su repositorio y escriba gitk.

En el medio de la GUI, hay un cuadro de búsqueda. Proporciona una buena selección de filtros:

Barra de búsqueda

Alcance: contiene, toca caminos, agrega / elimina cadenas, cambia la coincidencia de líneas

Tipo de coincidencia: exacto / IgnCase / Regexp

Campos de búsqueda - Todos los campos / Encabezado / Comentarios / Comprador

Iglesia
fuente
4

Si tiene una versión local del repositorio, puede probar este script de shell crudo que escribí para abrir las páginas de GitHub para todas las confirmaciones que coinciden con su término de búsqueda en nuevas pestañas en su navegador predeterminado:

#!/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

Simplemente reemplácelo https://github.com/RepoOwnerUserName/RepoName/con la URL de GitHub real de su repositorio, guarde el script en algún lugar (por ejemplo githubsearch.sh, como , hágalo ejecutable ( chmod +x githubsearch.sh) y luego agregue el siguiente alias a su ~/.bashrcarchivo:

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

Luego, desde cualquier lugar en su repositorio Git, simplemente haga esto en la terminal:

githubsearch "what you want to search for"

y cualquier confirmación que coincida con su término de búsqueda (sin distinción entre mayúsculas y minúsculas) tendrá sus correspondientes páginas de GitHub abiertas en su navegador. (Tenga en cuenta que si su término de búsqueda aparece en cientos de confirmaciones, esto podría bloquear su navegador y consumir la CPU de su PC por un tiempo).

Mark Amery
fuente
0

A mediados de 2019, simplemente escriba lo que desee buscar en el cuadro de búsqueda superior izquierdo y luego haga clic en " Confirmar ".

ingrese la descripción de la imagen aquí

M3RS
fuente