Máte on-premise azure devops server a potřebujete efektivně vše stáhnout k vám na disk?
Budete potřebovat PAT (personal access token) + ssh klíč na svého azure devops uživatele. Jakmile ho budete mít, uveďte ho do PAT, upravte si JmenoFirmy,NazevProjektu, PROJECT proměnné nahoře.
Skript byl testován a dělá co má. Tak snad vám ušetří trošku toho trápení a vymýšlení, jak stáhnout hromadně všechny repozitáře v azure devops projektu.
Ukázka výsledku:
⬇ Klonuji: názevRepa
Cloning into 'názevRepa'…
remote: Azure Repos
remote: Found xxyz objects to send. (75 ms)
Receiving objects: 100% (xxyz/xxyz), 720.54 KiB | 18.96 MiB/s, done.
Resolving deltas: 100% (xxyy/xxyy), done.
Hotovo! Všechny repozitáře jsou staženy.
Ukázka funkčního skriptu
Testováno na Lubuntu desktop 22.04 LTS. Testováno a promptěno v Gemini.
#!/bin/bash
# --- KONFIGURACE ---
BASE_URL="https://azure-devops-server.jmeno.domena.com/projects/jmenoFirmy/NazevProjektu"
ORG="jmenoFirmy"
PROJECT="NazevProjektu"
PAT="VášPersonalAccessToken"
SSH_BASE="ssh://azure-devops-server.jmeno.domena.com:22/projects/jmenoFirmy/NazevProjektu/_git/"
API_URL="https://azure-devops-server.jmeno.domena.com/projects/$ORG/$PROJECT/_apis/git/repositories?api-version=5.1"
# Kódování autentizace
# On-Premise servery někdy lépe snášejí, když je uživatel explicitně prázdný
# Vygenerujeme Base64 ručně pro jistotu
# Firmyrizace pro API
AUTH=$(echo -n ":$PAT" | base64)
echo "Získávám seznam repozitářů..."
# Získání jmen repozitářů (jq vytáhne jen pole "name")
REPOS=$(curl -s -k -L -H "Authorization: Basic $AUTH" -H "Accept: application/json" "$API_URL" | jq -r '.value[].name')
if [ -z "$REPOS" ]; then
echo "❌ Nepodařilo se načíst seznam repozitářů přes API."
exit 1
fi
echo "✅ Nalezeno repozitářů. Začínám klonovat přes SSH..."
echo "----------------------------------------------"
for repo_name in $REPOS; do
# Sestavení SSH URL pro konkrétní repo
# Výsledek: ssh://azure-devops-server.firma.adresa.com:22/projects/JmenoFirmy/JmenoProjektu/_git/NAZEV_REPO
SSH_URL="$SSH_BASE/$repo_name"
echo "⬇ Klonuji: $repo_name"
# Klonování přes SSH
git clone "$SSH_URL" "$repo_name"
echo "----------------------------------------------"
done
echo "Hotovo! Všechny repozitáře jsou staženy."