¿Hay alguna forma en la que pueda ver todos los repositorios de git que existen en mi máquina? ¿Algún comando para eso?
¿Hay alguna forma en la que pueda ver todos los repositorios de git que existen en mi máquina? ¿Algún comando para eso?
Respuestas:
Si está en Linux find / -name ".git", de lo contrario no hay forma, son directorios estándar, solo use el programa de búsqueda de archivos / carpetas de su sistema operativo para encontrar .gitcarpetas con nombre.
for d in `find / -name ".git"`; do cd $d/..; echo `pwd`:; git status; echo; done
RESPUESTA ORIGINAL : Esto funciona bastante bien desde Windows Powershell:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse
EDITAR # 1 : -Filter es dos veces más rápido que -Include. Aquí está esa solución:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse
EDICIÓN # 2 : Keith E. Truesdell mencionó el envío de la salida a un archivo. Vea su comentario para esa solución. Prefiero la salida de consola. Pero su comentario me hizo pensar que prefiero solo la ruta completa, no todo el desorden que se devuelve por defecto. Si desea que solo la ruta completa, use lo siguiente:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.FullName }
NOTA FINAL : Las soluciones anteriores solo devuelven repositorios de Git en el directorio actual . Si desea TODOS los repositorios en una unidad, debe ejecutar el comando una vez desde la raíz de cada unidad.
En * nix, esto también encontrará --barerepositorios.
find / -name "*.git" -type d
name.giteso es solo una convención, que yo, por ejemplo, no sigo.
findesos repositorios?
Repositorios Git todos tienen HEAD, refsy objectslas entradas.
en GNU / cualquier cosa,
find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n
Con solo buscar, .gitse perderán muchos repositorios y submódulos.
Para volverse completamente paranoico con la verificación, puede pedirle a git que haga todas sus propias verificaciones antes de imprimir,
find -name HEAD -execdir test -e refs -a -e objects \; \
-execdir sh -ec 'GIT_DIR=$PWD git rev-parse --absolute-git-dir 2>&-' \;
(editar: pensé que el .git/configarchivo era necesario, resulta que no lo es, por lo que el mínimo absoluto git init newrepoes
mkdir -p newrepo/.git/{objects,refs}
echo ref: refs/heads/master >newrepo/.git/HEAD
)
En Linux, una forma más rápida sería:
locate -r "\.git$"
asumiendo que mantiene actualizada la base de datos de localización con sudo updatedb
En Linux y OS X, el siguiente comando es posiblemente el más rápido (ignorando los repositorios sin .git) cuando el directorio raíz de findes /:
find / -name .git -exec dirname {} \; -prune
Pero para las raíces que tienen en su mayoría repositorios debajo, la siguiente es probablemente la más rápida (es posible que desee reemplazarla /por .otra raíz):
find / -type d -exec test -d {}/.git \; -prune -print
Explicación rápida de los primarios de findusado (dado que aquí no hay operadores presentes, -andestá implícita, es decir, para cada nodo visitado los primarios se evalúan de izquierda a derecha hasta que uno de ellos evalúa false):
-namees truesi el nombre coincide (a menudo, pero no aquí, con comodines)-execejecuta un comando terminado por ;(del cual se escapa \para evitar la interpretación del shell), y es truesi el estado de retorno es 0( es decir, OK). El nodo actual está disponible como {}(que no necesita escapar)-prunees siempre true, y hace que se omitan todos los nodos secundarios-type des truepara directorios-printes necesario aquí porque si -execestá presente no se adjunta implícitamenteEn Linux, pruebe este comando con permiso de root:
find / | grep \\.git$
esto solo busca todos los archivos que terminan con .git ... puede hacerlo con herramientas de búsqueda en Windows, Linux, etc.
findsalir todo y luego filtrar con grep. Preferiría usar--name "*.git"
/árbol para que el segundo lo haga grep, cuando el primero puede hacer todo y evitar el enorme uso inútil de IO. No es una diferencia real para el usuario normalmente, pero para grandes sistemas de archivos podría marcar la diferencia.
Una versión simple de PowerShell:
Get-ChildItem . -Recurse -Hidden .git
C:\users\<username>\PrintHood también, Me pareció útil agregar una salida a un archivo y, dado que solo me importaba la ruta (ya que este script obtiene mucha información), también filtrar solo la información de la ruta / directorio. Get-ChildItem . -Recurse -Hidden .git | Out-file -FilePath C:\Dev\GitRepoList.txt
Pequeña variación de la respuesta de Eric Burcham. Esa respuesta agrega \ .git al final, esta no.
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }
Utilizo este comando al comienzo del día. Simplemente agrega algunos comandos git a los anteriores. Por alguna razón, nuestro repositorio de git funciona mejor si uno ejecuta una búsqueda y luego una extracción, no sé por qué. Y tenemos muchos submódulos por alguna razón. De todos modos, ponga lo que necesita entre las {}.
push-location; Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { cd $_.parent.fullname; write-host '*************'; $(get-location).path; git fetch; git pull; git checkout .; git clean -f; git submodule update; git status; write-host '*************'; write-host ' '; }; pop-location