Есть ли способ увидеть все репозитории 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