#!/bin/bash # === Настройки === SERVER="http://mytfs.mycompany.com:8080/tfs" # URL сервера COLLECTION="DefaultCollection" # Имя коллекции PROJECT="MyProject" # Имя проекта PAT="abc123xyzabcdef1234567890" # Personal Access Token REPO_DIR="./repos" # Локальная папка для репозиториев # === Формирование URL === REPOS_URL="${SERVER}/${COLLECTION}/${PROJECT}/_apis/git/repositories?api-version=5.0" # === Создание директории для репозиториев === mkdir -p "$REPO_DIR" # === Получение списка репозиториев через REST API === echo "Получение списка репозиториев из проекта '$PROJECT'..." AUTH_HEADER=$(echo -n ":$PAT" | base64) response=$(curl -s -H "Authorization: Basic $AUTH_HEADER" "$REPOS_URL") repo_names=$(echo "$response" | jq -r '.value[].name') if [ -z "$repo_names" ]; then echo "Не удалось получить список репозиториев. Проверь URL, PAT и имя проекта." exit 1 fi # === Вывод заголовков таблицы === printf "| %-30s | %-12s | %-12s |\n" "Репозиторий" "Файлов" "Размер" printf "|--------------------------------|--------------|--------------|\n" # === Обход каждого репозитория === for repo in $repo_names; do echo "Обработка репозитория: $repo" # URL репозитория GIT_URL="${SERVER}/${COLLECTION}/_git/${repo}" # Путь к локальному репозиторию local_path="${REPO_DIR}/${repo}" # Клонируем, если ещё не существует if [ ! -d "$local_path" ]; then echo "Клонирование репозитория $repo..." git clone "$GIT_URL" "$local_path" --quiet else echo "Репозиторий уже существует: $repo" fi # Переход в директорию cd "$local_path" || continue # Подсчёт файлов file_count=$(find . -type f | wc -l) # Подсчёт размера size=$(du -sh . | awk '{print $1}') # Вывод информации printf "| %-30s | %-12s | %-12s |\n" "$repo" "$file_count" "$size" cd - > /dev/null done