Existe uma maneira em que eu possa ver todos os repositórios git que existem na minha máquina? Algum comando para isso?
Existe uma maneira em que eu possa ver todos os repositórios git que existem na minha máquina? Algum comando para isso?
Respostas:
Se você estiver no Linux find / -name ".git", caso contrário não há como, eles são diretórios padrão; basta usar o programa de localização de arquivos / pastas do SO para encontrar .gitpastas nomeadas.
for d in `find / -name ".git"`; do cd $d/..; echo `pwd`:; git status; echo; done
RESPOSTA ORIGINAL : Isso funciona muito bem no Windows Powershell:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse
EDIT # 1 : -Filter é duas vezes mais rápido que -Include. Aqui está essa solução:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse
Edição 2 : Keith E. Truesdell mencionou o envio da saída para um arquivo. Veja o comentário dele para essa solução. Eu prefiro a saída do console. Mas o comentário dele me fez pensar que eu prefiro apenas o caminho completo, não toda a bagunça que é retornada por padrão. Se você deseja que apenas o caminho completo, use o seguinte:
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.FullName }
NOTA FINAL : As soluções acima retornam apenas repositórios Git no diretório atual . Se você deseja TODOS os repositórios em uma unidade, execute o comando uma vez a partir da raiz de cada unidade.
No * nix, este também encontrará quaisquer --barerepositórios.
find / -name "*.git" -type d
name.gité apenas uma convenção que eu, por exemplo, não sigo.
findesses repositórios ?
Repositórios Git todos têm HEAD, refse objectsentradas.
no GNU / qualquer coisa,
find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n
Apenas a verificação .gitperderá muitos repositórios e submodulos vazios.
Para ficar totalmente paranóico na verificação, você pode pedir ao git para fazer todas as suas próprias verificações 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>&-' \;
(edit: eu pensei que o .git/configarquivo era necessário, acontece que não é, então o mínimo absoluto git init newrepoé
mkdir -p newrepo/.git/{objects,refs}
echo ref: refs/heads/master >newrepo/.git/HEAD
)
No Linux, uma maneira mais rápida seria:
locate -r "\.git$"
supondo que você mantenha o banco de dados do localizador atualizado com sudo updatedb
No Linux e OS X, o seguinte comando é possivelmente o mais rápido (ignorando repositórios sem .git) quando o diretório raiz de findé /:
find / -name .git -exec dirname {} \; -prune
Mas para as raízes que possuem principalmente repositórios abaixo, o seguinte é provavelmente o mais rápido (você pode substituir /por .outra raiz):
find / -type d -exec test -d {}/.git \; -prune -print
Explicação rápida das primárias de findusado (desde há operadores estão presentes aqui, -andestá implícito, ou seja, para cada visitados nó primárias são processados da esquerda para a direita até que um deles avalia a false):
-nameé truese o nome corresponder (geralmente, mas não aqui, com caracteres curinga)-execexecuta um comando terminado por ;(que é escapado por \para evitar a interpretação pelo shell) e é truese o status de retorno é 0(ou seja, OK). O nó atual está disponível como {}(que não precisa ser escapado)-pruneé sempre truee faz com que todos os nós filhos sejam ignorados-type dé truepara diretórios-printé necessário aqui, porque se -execestiver presente, não é implicitamente anexadoNo Linux, tente este comando com permissão root:
find / | grep \\.git$
isso apenas pesquisa todos os arquivos que terminam com .git ... você pode fazer isso com ferramentas de pesquisa no Windows, Linux etc ...
findtudo sair e depois filtrar grep. Eu preferiria usar--name "*.git"
/árvore inteira para o segundo grep, quando o primeiro pode fazer tudo e evitar o enorme uso inútil de IO. Não é uma diferença real para o usuário normalmente, mas para grandes sistemas de arquivos pode fazer a diferença.
Uma versão simples do PowerShell:
Get-ChildItem . -Recurse -Hidden .git
C:\users\<username>\PrintHood , eu também achei que seria útil para adicionar uma saída para um arquivo e desde que eu só se preocupava com o caminho (como este script recebe um monte de informações) para também filtrar apenas pela informação caminho / diretório. Get-ChildItem . -Recurse -Hidden .git | Out-file -FilePath C:\Dev\GitRepoList.txt
Pequena variação da resposta de Eric Burcham. Essa resposta adiciona \ .git ao final, essa não.
Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }
Eu uso esse comando no início do dia. Ele simplesmente adiciona alguns comandos git ao acima. Por alguma razão, nosso repositório git funciona melhor se alguém executa uma busca e depois puxa, não sabe o porquê. E nós temos muitos submódulos por algum motivo. Enfim, coloque o que você precisa entre os {} 's.
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