Usando Git, ¿cómo podría buscar dentro de todos los archivos en todas las sucursales locales una cadena dada?
Específico de GitHub: ¿es posible realizar la búsqueda anterior en todas las ramas de GitHub? (Hay varias ramas remotas en mi repositorio remoto de GitHub que idealmente no tendría que bajar para esta búsqueda ...)
Respuestas:
Puedes hacer esto en un repositorio de Git:
La búsqueda avanzada de GitHub tiene la capacidad de búsqueda de código:
La búsqueda de código revisará todo el código alojado públicamente en GitHub. También puedes filtrar por:
language:
repo:
path:
fuente
git grep ...
. Mira las otras respuestas, ¡son mucho mejores que esta aunque esté marcada como la respuesta aceptada!path:
, porque la documentación de un vistazo no parece clara dónde aplicar este filtro, ¿supongo que está antes de las comillas en su ejemplo de consulta?Si usa el comando @manojlds Git grep y obtiene un error:
entonces deberías usar xargs :
Consulte también Cómo codificar (buscar) el código comprometido en el historial de Git
fuente
En muchos casos,
git rev-list --all
puede devolver una gran cantidad de confirmaciones, tardando una eternidad en escanear. Si, en lugar de buscar a través de cada confirmación en cada rama en su historial de repositorio, solo desea buscar todos los consejos de la rama, puede reemplazarlo porgit show-ref --heads
. Entonces en total:o:
Consejo: puede escribir la salida en el archivo para verla en un editor:
fuente
git show-ref --heads
enumera el hash y el nombre de referencia para que (segunda línea) busque dos veces. así quegit show-ref --heads | cut -d' ' -f2
es mejor ya que solo enumerará los nombres de referencia.git show-ref --heads -s
solo genera el hash SHA1. Además, si hay varias ramas que apuntan a la misma confirmación, tendrá duplicados. Puede eliminarlos consort -u
, como asígit show-ref --heads -s | sort -u | xargs git grep ...
function gsearch { git grep $1 $(git show-ref --heads) | grep "refs/heads" | grep $1 } # last grep to keep grep color highlight
Hay algunos problemas con las soluciones enumeradas aquí (incluso aceptadas).
No necesita enumerar todos los hashes ya que obtendrá duplicados. Además, lleva más tiempo.
Se basa en esto, donde puede buscar una cadena
"test -f /"
en varias ramasmaster
ydev
comoque es lo mismo que
Entonces aquí va.
Esto encuentra los hash para la punta de todas las sucursales locales y busca solo en esas confirmaciones:
Si necesita buscar también en sucursales remotas, agregue
-a
:Más lejos:
fuente
git branch -a | cut -c3- | cut -d' ' -f 1 | xargs git grep "string"
o fallará con el->
símbolo en la lista de archivos, que denota la relación de las ramas locales a remotasPuedes probar esto:
fuente
git log --all -s"search_string"