#git #git_remote
Нередко для того, чтобы локализовать проблему с использованием и настройкой удалённых репозиториев в Git требуется узнать, является ли удалённый репозиторий «голым» ("bare") или обычным, имеющим рабочую копию файлов. Разумеется, если репозиторий на GitHub, Bitbucket, Gitlab или чём-то подобном, то мы знаем точно. Также возможны решения вроде «залогиниться на сервер и посмотреть» — но далеко не всегда это возможно. Ещё можно пробовать пушить какие-либо изменения и смотреть на реакцию — но это меняет текущее состояние и тем самым усложняет проблему. Мне нужен простой способ, который можно будет предлагать тем, от кого нужны уточнения по вопросу (например, такому). Обязательно не меняющий состояние удалённого и локального репозиториев Желательно только средствами git и ОС (без установки дополнительного ПО) Обходные решения не годятся («зайти и посмотреть», «спросить админа» и т.п.). Предположим, что доступа по SSH нет или пользователь не умеет это делать.
Ответы
Ответ 1
Пока что лучшее, что я могу придумать — смотреть на имена удалённых репозиториев в их локальной фс и делать следующие предположения .git – с рабочей копией name.git – голый, bare. Дальше смотрим на вывод remote -v show и вырезаем из него путь — участок между именем репозитория (под которым он настроен локально) и именем папки. Нам этот путь не интересен, а раскрывать его может быть нежелательно. git remote -v show | sed s/'[[:space:]].*\/'/': '/g В моих экспериментах это возвращает следующее: С рабочей копией (склонировал из соседней папки) origin: .git (fetch) origin: .git (push) Голый (склонировал из Gitlab) origin: test-name.git (fetch) origin: test-name.git (push) Если репозиториев подключено несколько, то будет информация про каждый: origin: .git (fetch) origin: .git (push) backup: .git (fetch) backup: .git (push)Ответ 2
git rev-parse --is-bare-repository When the repository is bare print "true", otherwise "false". https://stackoverflow.com/questions/1830701/how-do-i-check-if-a-repository-is-bare
Комментариев нет:
Отправить комментарий