Čt. Čvn 19th, 2025
zdrojový bash skript, který stáhne pro každý repozitář všechny branche

Dříve na tomto blogu jste měli možnost si rozběhat vlastní gitlab. Dnes to bude rovněž praktické. Pokud máte gitlab za https dosažitelný bez custom certifikátu, je to zábava. Provoláte si hezky API gitlabu, ten vám vyplivne seznam repozitářů a máte vystaráno, pak si je hezky stáhnete, stáhnete všechny jejich branche a už se s tím dá žít.

Do souboru repolist.txt si nahažte řádek po řádku všechny URL pro stažení repozitářů (mohou být napříč jinými gitlab servery):

pojmenujte třeba download.sh a potom na něj dejte
chmod 700 ./download.sh

#!/bin/bash
# Soubor s listem repozitářů
REPOLIST="repolist.txt"

# Funkce pro stažení repozitáře
download_repo() {
  REPO=$1
  BRANCHES=$(git ls-remote --heads "$REPO")

  echo "Stahuji repozitář: $REPO"

  # Vytvoření adresáře s názvem repozitáře (bez .git)
  DIR=$(basename "$REPO" .git)
  mkdir -p "$DIR" || { echo "Chyba při vytváření adresáře '$DIR'"; return 1; }
  cd "$DIR" || { echo "Chyba při změně adresáře do '$DIR'"; return 1; }

  # Klonování repozitáře (pouze master branch) - nutné pro inicializaci
  git clone "$REPO" . || { echo "Chyba při klonování repozitáře '$REPO' (master branch)"; cd ..; return 1; }


  # Stažení všech branchí
  for BRANCH in $BRANCHES; do
    BRANCH_NAME=$(echo "$BRANCH" | awk '{print $2}') # Extrakce názvu branchě
    echo "Stahuji branch: $BRANCH_NAME"
    git fetch origin "$BRANCH_NAME" || { echo "Chyba při stahování branchě '$BRANCH_NAME'"; cd ..; return 1; }
    git checkout -b "$BRANCH_NAME" "origin/$BRANCH_NAME" || { echo "Chyba při vytvoření a check-outu branchě '$BRANCH_NAME'"; cd ..; return 1; }
  done

  # Návrat do původního adresáře
  cd ..
}

# Kontrola, zda existuje soubor s repozitáři
if [ ! -f "$REPOLIST" ]; then
  echo "Chyba: Soubor '$REPOLIST' neexistuje."
  exit 1
fi

# Procházení seznamu repozitářů
while read REPO; do
  download_repo "$REPO" || { echo "Stahování repozitáře '$REPO' selhalo."; }
done < "$REPOLIST"

echo "Staženy repozitáře zatím bez všech branchí!"
for repo in ./*; do
  if [ -d "$repo/.git" ]; then
    echo "Zpracovávám $repo"
    cd "$repo" || continue
    git fetch --all
    for branch in $(git branch -r | grep -v '\->'); do
        git branch --track "${branch#origin/}" "$branch" 2>/dev/null || true
    done
    cd - > /dev/null
  fi
done
echo "hotovo"

Otestováno, funguje

Preventivně každého upozorňuji, že pokud taháte nějaké skripty z netu, prvně si je ověřte, že fungují a dělají, co mají, než vám to něco rozbije.

zdroj

Avatar

By mirra

Hardwaru a počítačům se věnuji již od roku 2003. Za tu dobu jsem poskládal stovky počítačů, opravil tisíce počítačů a vyřešil nespočetně problémů, vad a chyb, se kterými se setkávali uživatelé. Od roku 2005 se zabývám servery, zejména těmi herními, v roce 2007 jsem se začal věnovat Valve Source SDK level designu, který šel od roku 2009 k ledu kvůli studiu Informatiky na univerzitě. Podílel jsem se chvíli i na provozu síťové laboratoře MENDELU, dnes spravuji v jedné osobě cca 100 serverů/diskových polí na univerzitě, řeším IT v malých a středních firmách tak, aby firmy ušetřily nemalé částky při zlepšení kvality a soustředím se na snižování nákladů na IT od licencí až po hardware, software, provádím konsolidace a audity platnosti licencí, které firmám šetří rovněž nemalé peníze. Z velkých firem jsem měl příležitost s dalšími kolegy řešit správu 8000 serverů po celé západní Evropě s vysokou mírou automatizace a poznávání nejrůznějších evropských pracovních mentalit. Dále jsem řešil hybridní cloud ve velké firmě, orientované na trhy střední a východní Evropy. Posledních několik let se věnuji Devops pro velké zákazníky v Azure cloudu, spravuji kubernetes (AKS), Gitlab.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

5 × 5 =