如何在我的机器上查看所有git存储库?

n1k*_*1lp 106 git

有没有办法可以看到我机器上存在的所有git存储库?任何命令?

Ark*_*nez 91

如果你在Linux中find / -name ".git",否则没有办法,它们是标准目录,只需使用你的OS文件/文件夹查找程序来查找.git命名文件夹.

  • @jmlane`for d in \`find/-name".git"\`; 做cd $ d/..; echo \`pwd \`:; git status; 回声; done` (5认同)
  • 在Mac上,上面的命令也可以.(除非您运行OS9或更早版本!) (3认同)
  • 在 Windows 上(我相信 Mac 也是如此)你可以做一些类似的事情......只需搜索名为 .git 的目录 - 这是 git 用来存储其元信息的内容。 (2认同)

Eri*_*ham 38

这在Windows Powershell中非常有效:

Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse
Run Code Online (Sandbox Code Playgroud)

  • Get-ChildItem:找不到与参数名称"Attributes"匹配的参数.在行:1字符:28 (2认同)
  • @DewaldSwanepoel - 您可以完全升级PowerShell版本.我们用巧克力做.我目前正在Windows 7上运行PowerShell 5.0版. (2认同)

gah*_*ooa 14

在*nix上,这也将找到任何--bare存储库.

find / -name "*.git" -type d
Run Code Online (Sandbox Code Playgroud)

  • 裸存储库不需要命名为`name.git`,这只是一个约定,例如我不遵循. (3认同)
  • 鉴于裸存储库不需要遵循该命名约定,是否有通用的方法来"查找"这些存储库? (3认同)

Wal*_*oss 11

.git在 Linux 和 OS X 上,当 的根目录为 时,find以下命令可能是最快的(忽略没有 的存储库) /

find / -name .git -exec dirname {} \; -prune
Run Code Online (Sandbox Code Playgroud)

但对于下面主要有存储库的根来说,以下可能是最快的(您可能需要替换/.或另一个根):

find / -type d -exec test -d {}/.git \; -prune -print
Run Code Online (Sandbox Code Playgroud)

使用的原色的快速解释find(因为这里没有运算符-and所以是隐式的,即,对于每个访问的节点,原色从左到右评估,直到其中一个评估为false):

  • -nametrue名称是否匹配(通常,但不在这里,使用通配符)
  • -exec执行由 终止的命令;(由 转义以\避免被 shell 解释),true如果返回状态为0(即 OK),则为 。当前节点可用作{}(无需转义)
  • -prune总是true,并导致所有子节点被跳过
  • -type d用于true目录
  • -print此处需要,因为如果-exec存在,则不会隐式附加


jth*_*ill 9

Git仓库都有HEAD,refs,objects.git项.

在GNU /任何东西,

find -name HEAD -execdir test -e refs -a -e objects \; -printf %h\\n
Run Code Online (Sandbox Code Playgroud)

只是检查.git/config将错过许多裸回购和所有子模块.


小智 5

在 Linux 上,更快的方法是:

locate -r "\.git$"

假设您不断更新locate的数据库sudo updatedb