Как просмотреть все репозитории git на моей машине?

Есть ли способ увидеть все репозитории git, которые существуют на моей машине? Любая команда для этого?

Ответ 1

Если вы находитесь в Linux find / -name ".git", в противном случае нет способа, они являются стандартными каталогами, просто используйте программу поиска файлов/папок в ОС для поиска .git названных папок.

Ответ 2

ОРИГИНАЛЬНЫЙ ОТВЕТ: Это хорошо работает в Windows Powershell:

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

ОБНОВЛЕНИЕ # 1: -Filter в два раза быстрее, чем -Include. Вот это решение:

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

ОБНОВЛЕНИЕ # 2: Кит Э. Трусделл упомянул об отправке вывода в файл. Смотрите его комментарий для этого решения. Я предпочитаю консольный вывод. Но его комментарий заставил меня подумать, что я предпочитаю только полный путь, а не весь беспорядок, который возвращается по умолчанию. Если вам нужен только полный путь, используйте следующее:

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

ЗАКЛЮЧИТЕЛЬНОЕ ПРИМЕЧАНИЕ: Приведенные выше решения возвращают только репозитории Git в текущем каталоге. Если вы хотите ВСЕ хранилища на диске, вы должны выполнить команду один раз из корня каждого диска.

Ответ 3

В * nix это также найдет любые репозитории --bare.

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

Ответ 4

Git у всех репозиториев есть записи HEAD, refs, objects и config.

в GNU/ничего,

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

Просто проверка на .git пропустит многие голые репозитории и все подмодули.

Ответ 5

В Linux более быстрый способ:

locate -r "\.git$"

при условии, что вы сохраните базу данных базы данных, обновленную с помощью sudo updatedb

Ответ 6

В Linux попробуйте эту команду с правами root:

find / | grep \\.git$

это просто ищет все файлы, которые заканчиваются на .git... вы можете сделать это с помощью инструментов поиска в Windows, Linux и т.д.

Ответ 7

В Linux и OS X следующая команда, возможно, самая быстрая (игнорирование репозиториев без .git), когда корневой каталог find равен /:

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

Но для корней, которые содержат в основном репозитории внизу, возможно, самое быстрое (вы можете заменить / на . или другой корень):

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

Быстрое объяснение праймериз find (поскольку здесь нет операторов, -and неявно, т.е. для каждого посещенного node праймеры оцениваются слева направо, пока один из них не оценит значение false):

  • -name true, если имя совпадает (часто, но не здесь, с подстановочными знаками)
  • -exec выполняет команду, завершенную ; (которая экранирована \, чтобы избежать интерпретации оболочки) и true, если статус возврата 0 (то есть, ОК). Текущий node доступен как {} (который не требует экранирования)
  • -prune всегда true и заставляет все дочерние узлы пропускаться
  • -type d - true для каталогов
  • -print здесь требуется, потому что если присутствует -exec, он неявно добавляется

Ответ 8

Простая версия PowerShell:

Get-ChildItem . -Recurse -Hidden .git

Ответ 9

Для Linux:

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