Заголовок для привлечения внимания А сегодня мы с тобой будем проверять на bash существует ли git репозиторий и есть ли к нему доступ.

Сразу к делу:

#!/bin/bash

# Проверяем, что указан репозиторий
if [ -z "$1" ]; then
  echo "Ошибка: Необходимо указать адрес репозитория."
  echo "Использование: $0 <адрес_репозитория>"
  exit 1
fi

REPO_URL="$1"

# Выполняем команду git ls-remote для проверки доступа
if git -q ls-remote "$REPO_URL" &> /dev/null; then
  echo "Репозиторий доступен: $REPO_URL"
else
  echo "Ошибка: Репозиторий не существует или нет доступа: $REPO_URL"
  exit 1
fi

Переменная окружения GIT_TERMINAL_PROMPT=0 отключает любые запросы ввода имени пользователя и пароля. То есть если репа запросит логин/пароль, то вернется ошибка (без ожидания ввода).

Чмодим на +x и запускаем:

./git-check.sh https://github.com/bashdays/only.git

Репозиторий доступен: https://github.com/bashdays/only.git

./git-check.sh https://github.com/bashdays/zalupka.git

Ошибка: Репозиторий не существует или нет доступа: https://github.com/bashdays/zalupka.git

Есть минусы, скрипт работает только с https ссылками (открытые репозитории), со ссылками вида git@ оно вернет ошибку если у тебя не будет добавлен в ssh ключ.

Обработать этот эксепшен можно как-то так:

#!/bin/bash

# Проверяем, что указан репозиторий
if [ -z "$1" ]; then
  echo "Ошибка: Необходимо указать адрес репозитория."
  echo "Использование: $0 <адрес_репозитория>"
  exit 1
fi

REPO_URL="$1"

# Функция проверки доступа
check_repo_access() {
  local url="$1"

  # Проверяем репозиторий с помощью git ls-remote
  if git -q ls-remote "$url" &> /dev/null; then
    echo "Репозиторий доступен: $url"
    return 0
  else
    echo "Ошибка: Репозиторий не существует или нет доступа: $url"
    return 1
  fi
}

# Определяем, является ли URL SSH или HTTP/HTTPS
if [[ "$REPO_URL" == git@*:* ]]; then
  # Если SSH, проверяем доступ через SSH
  ssh_host=$(echo "$REPO_URL" | awk -F':' '{print $1}' | awk -F'@' '{print $2}')
  if ssh -T "$ssh_host" &> /dev/null; then
    check_repo_access "$REPO_URL"
  else
    echo "Ошибка: SSH-доступ к $ssh_host не настроен или нет прав."
    exit 1
  fi
else
  # Для HTTP/HTTPS проверяем репозиторий
  check_repo_access "$REPO_URL"
fi
Роман Шубин
Роман Шубин
CEO & CTO, Главред в «Цифровой улей»
Задать вопрос
Где применить решать тебе, можешь взять этот концепт за основу и что-то своё накидать.

У меня кое-где в пайплайнах есть такие проверки, перед тем как делается git clone. Ну и еще есть парсер репозиториев, загоняешь ему список и он по нему проходится, мертвые репы пишет в файл.

В общем обычная рутина. Я принес, показал, а ты уже сам решай надо оно тебе или нет.