Zamysleli ste sa niekedy, prečo ľudia prevádzkujú self-hosted riešenia, aj keď kopírujú alebo napodobňujú služby a nástroje, ktoré sú preverené, fungujú dobre a väčšinou sú zadarmo?

Za takýmto úsilím sa skrýva niečo naozaj silné. Vždy to chvíľu trvá, kým to nastavíte. Nemá to toľko používateľov, ktorí by vytvárali interakcie. Môže vás to dokonca stáť peniaze na prevádzku. Niekedy, keď si myslíte „konečne sa mi to podarilo”, zistíte, že existujú nevyriešené problémy, ktoré vám môžu skutočne skomplikovať život.

Keď to nakoniec rozbehniete, vyvstáva ďalšia otázka: čo tam dáte dnu?

Sťahujeme sa! #

V tomto článku vysvetlím jednoduchý postup, ako migrovať existujúce repozitáre z BitBucketu na gitea server.

Skôr než začneme, uistite sa, že máte gitea správne nastavené, inak vám to bude hádzať polená pod nohy a spomaľovať.

Funkcionalita, na ktorú odkazujem, je „Push to create repository”. Táto funkcia je tiež prítomná v GitLabe, a ak sa nemýlim, tam sa objavila ako prvá, a ja ju považujem za super užitočnú, zvlášť pri migrácii. Stačí pridať origin k lokálnemu repozitáru a pushnúť. Žiadne ďalšie načítavanie stránok, prihlasovanie ani klikanie!

Tiež si všimnite, že som túto funkciu v BitBuckte nenašiel, takže spätný postup pravdepodobne nebude fungovať rovnako, a o GitHube si tiež nie som istý.

Spôsob, ako to v gitea povoliť, je ísť priamo do app.ini a všetko zúrivo editovať. Len sa šalím. Stačí pridať alebo upraviť sekciu [repository]. Konfiguračné premenné, ktoré potrebujete, sú ENABLE_PUSH_CREATE_USER a / alebo ENABLE_PUSH_CREATE_ORG, v závislosti od vášho použitia. Nastavte na true.

Táto funkcia je zdokumentovaná, takže si o nej môžete prečítať viac na gitea cheat sheet.

Stiahnutie #

Keď sú potrebné nastavenia na mieste, ďalším krokom je klonovanie repozitára z BitBucketu. Zdá sa to jednoduché, poviete si. Môžeme použiť gitea migračnú funkcionalitu. No, v čase písania je stabilná verzia gitea 1.11.6, ktorá má v migračnom rozhraní poznámku:

Zrkadlenie LFS objektov nie je podporované – použite git lfs fetch --all a git lfs push --all.

Ani zmena toho nie je v dohľade. Aj keď release kandidát pre verziu 1.12 obsahuje vylepšenia súvisiace s migráciami, ide o logovanie povolené cez #11647. Musíme to teda urobiť ručne, začneme klonovaním:

git clone [email protected]:alexilaiho/guitar-repository.git

Na chvíľu sa zastavte. Alexi by nebol šťastný, keby zistil, že jeho struny gitara sú vlastne submodul a má gitaru, ale bez nich. Poďme to napraviť:

git clone --recurse-submodules [email protected]:alexilaiho/guitar-repository.git

Toto som prebral z oh-my-zsh git pluginu, ale myslím, že je to celkom dobre známe. Hľadajte alias gcl.

Keby mala Alexiho gitara nejaký vývojový branch, ten by mu tiež chýbal. Riešenie, ktoré som našiel, je následne spustiť príkaz pull s argumentom --all:

git pull --all --tags

Predpokladáme, že Alexi by zodpovedne tagoval vydania svojej gitary, takže by chcel mať aj všetky relevantné informácie stiahnuté, odtiaľ argument --tags.

Ale krk jeho gitary je celkom veľká časť a mohol by byť distribuovaný dokonca v binárnom formáte, napríklad ako obrázok v naozaj obrovskom rozlíšení. Ako profesionál by si samozrejme chcel, aby bola jeho gitara ostrá a čistá vo všetkých ohľadoch. Keby mal v repozitári viac verzií tohto blob krku gitary, všetky okrem najnovšej by v naklonovanom repozitári chýbali.

git lfs fetch --all

Teraz je jeho gitara tak kompletná ako na vzdialenom serveri.

Čistenie #

Repozitár treba teraz pripraviť na push do nového domova. Vymeňme origin zo starého na nový:

git remote remove origin
git remote add origin [email protected]/guitar-repository.git

Všimnite si, že URI repozitára nemusí vopred existovať. Pamätajte, repozitár sa vytvorí pri pushu!

Odoslanie #

Tak to skúsme:

git push --all origin
git push --tags origin
git lfs push ---all  origin master

Teraz by Alexi našiel svoju milovanú naleštená gitaru v novom domove. Toto vyžaduje funkčný SSH prístup pre oba repozitáre.

Záver v skratke #

Ak to plánujete robiť viackrát, je vhodné to vložiť do skriptu. Urobil som jeden, ktorý vyzerá takto, ale kľudne ho prispôsobte svojim potrebám.

#!/bin/bash

host="[email protected]:YOUR-BITBUCKET-USER"
target="git@YOUR-GITEA-SERVER:you"

echo "Migrating $1"

git clone --recurse-submodules "$host/$1.git"
cd $1
git pull --all --tags
git lfs fetch --all
git remote remove origin
git remote add origin "$target/$1.git"
git push --all origin
git push --tags origin
git lfs push --all origin master
cd ..

Dúfam, že vám to pomôže. Nenašiel som jednoduchý spôsob, ako stiahnuť viac repozitárov z BitBucketu naraz, takže tu je stále priestor na zlepšenie. Dajte mi vedieť o vašich skúsenostiach.

Záver #

Na začiatku článku som sa opýtal, prečo ľudia radi self-hostujú svoje služby. Tu sme na to neprišli, ale uľahčili sme si život automatizovaným riešením na migráciu repozitára z BitBucketu na gitea server, čím ušetríme trochu času a nervov.

Ak sa nachádzate v podobnej situácii ako ja a príde vám tento príspevok užitočný, som zvedavý, prečo ste si vybrali gitea spomedzi alternatív. Zatiaľ je to pre mňa príjemná skúsenosť. Ak si to užívate tiež, šírte osvetu a pomôžte open source softvéru prosperovať!