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



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

383   9  
git

9 ответов:

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

это работает довольно хорошо из Windows Powershell:

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

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

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

Git-репозитории все есть!--1-->,refs,objects и config записи.

на GNU / anything,

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

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

в Linux, попробуйте эту команду с правами суперпользователя:

find / | grep \.git$

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

на Linux, более быстрый способ такой:

locate -r "\.git$"

предполагая, что вы держите базу данных locate обновляется с sudo updatedb

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

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

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

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

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

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

Для Linux:

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

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

Get-ChildItem . -Recurse -Hidden .git

Comments

    Ничего не найдено.