Как я могу просмотреть все репозитории git на моей машине? - PullRequest
99 голосов
/ 07 января 2010

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

Ответы [ 9 ]

84 голосов
/ 07 января 2010

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

32 голосов
/ 30 июня 2015

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

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

РЕДАКТИРОВАТЬ # 2 : -Фильтр в два раза быстрее , чем -Включить. Вот это решение:

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

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

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

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

13 голосов
/ 07 января 2010

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

find / -name "*.git" -type d
7 голосов
/ 15 октября 2017

Git-репозитории имеют записи HEAD, refs, objects и config.

на GNU / что угодно,

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

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

3 голосов
/ 28 июля 2017

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

locate -r "\.git$"

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

2 голосов
/ 29 марта 2018

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

Get-ChildItem . -Recurse -Hidden .git
2 голосов
/ 07 января 2010

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

find / | grep \\.git$

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

1 голос
/ 06 декабря 2017

В 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, он не добавляется неявно
0 голосов
/ 20 марта 2018

Для Linux:

dir="/home/${USER}"
dir_not="${dir}/miniconda3"
find /home/aeug -type d -iname ".git" -o -path "${dir_not}" -prune | xargs -0 echo 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...