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

时间:2010-01-07 14:03:54

标签: git

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

10 个答案:

答案 0 :(得分:82)

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

答案 1 :(得分:31)

这在Windows Powershell中非常有效:

Get-ChildItem . -Attributes Directory,Directory+Hidden -ErrorAction SilentlyContinue -Include ".git" -Recurse

答案 2 :(得分:11)

在* nix上,这也会找到任何--bare个存储库。

find / -name "*.git" -type d

答案 3 :(得分:6)

Git存储库都有HEADrefsobjectsconfig条目。

on GNU / anything,

find -name HEAD -execdir test -e refs -a -e objects -a -e config \; -printf %h\\n

检查.git只会遗漏许多裸回购和所有子模块。

答案 4 :(得分:3)

在Linux上,更快的方法是:

locate -r "\.git$"

假设您使用sudo updatedb

更新了找到的数据库

答案 5 :(得分:2)

在Linux上,使用root权限尝试此命令:

find / | grep \\.git$

这只搜索以.git结尾的每个文件...你可以使用Windows,Linux等搜索工具来完成...

答案 6 :(得分:1)

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

find / -name .git -exec dirname {} \; -prune

但是对于下面主要存储库的根,以下可能是最快的(您可能希望用/或其他根替换.):

find / -type d -exec test -d {}/.git \; -prune -print

使用find primaries 的快速解释(因为此处没有运算符-and是隐式的,即每个访问过的节点 primaries 从左到右进行评估,直到其中一个评估为false):

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

答案 7 :(得分:1)

一个简单的PowerShell版本:

Get-ChildItem . -Recurse -Hidden .git

答案 8 :(得分:1)

与埃里克·伯卡姆(Eric Burcham)的回答略有不同。该答案以\ .git结尾,但不是。

Get-ChildItem . -Attributes Directory+Hidden -ErrorAction SilentlyContinue -Filter ".git" -Recurse | % { Write-Host $_.Parent.FullName }

我在一天开始时使用此命令。它只是在上面添加了一些git命令。出于某种原因,如果一个人先运行一次提取然后再进行提取(不知道为什么),那么我们的git存储库将发挥最佳作用。由于某种原因,我们有很多子模块。无论如何,请将您需要的内容放在{}之间。

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

答案 9 :(得分:0)

对于Linux:

dir="/home/${USER}"
dir_not="${dir}/miniconda3"
find /home/aeug -type d -iname ".git" -o -path "${dir_not}" -prune | xargs -0 echo