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