Portál AbcLinuxu, 3. května 2025 22:10
Při sepisování manuálu pro GRUB2 na naší wiki, jsem definitivně zlomil nad jeho vývojáři hůl, zatratil je do horoucích pekel a v návalu zoufalství se poohlédnul po nějakém nástroji, který by slušně konvertoval repozitory z bazaaru do gitu.
Možná že nějaký takový slušný tool existuje, ale já na něj nenarazil. Bazaar má nějaké rozšíření, které mu umožňuje spolupracovat s git repozitářem, ale já potřeboval něco trochu jiného. Nástroj, který by naopak bzr repozitář převedl na git, aniž bych přitom přišel o veškerou historii.
Nejdříve jsem zkoušel tailor. Jenže to je jednak další verzovací systém mezi a pak.. když jsem zkoušel konvertovat repozitář GRUB2, tak v půlce zkolaboval a konečná. Pak jsem narazil na skript Henrika Nilssena. Prima. Ten fungoval jak jsem čekal. Jenže ouha! Po přerušení začal git repozitář ládovat znova. No uznejte. Mám čekat pokaždé přes tři hodiny, než se provede konverze na aktuální verzi? To fakt ne. Také měl ten skript další neduhy - kupř. neodstraňoval duplicity, takže git repozitář pro GRUB2 měl po konverzi téměř 750MB(!).
No, nebudu napínat. Skript jsem trochu dopsal. Zároveň k němu přidal i pár souborů, ať se z toho dá udělat debianí balík. A stejně jako konverovaný repozitář grub2, jej dal - pod názvem bzr2git na náš git server.
Především bych chtěl poděkovat za nakopnutí správným směrem uživateli chrono, neboť o možnosti využít balíku bzr-fastimport
i pro export repository jsem nevěděl.
Jak už to tak bývá, celá věc je natolik triviální, že není vůbec nutné na to používat nějaký extra skript. stačí jen vědět jak na to, že? Takže pro budoucí čtenáře: Git repozitář se skriptem bzr2git jsem sice ponechal veřejně dostupný, ale pouze proto, kdyby někdo - podobně jako já včera - řešil jak zabalit svůj vlastní shellový skript do deb balíku. Konvertovat bzr repozitáře je mnohem jednodušší a rychlejší následujícím způsobem (demonstruji na výše zmíněném repozitáři pro grub2):
user@stroj:~$ bzr branch http://bzr.savannah.gnu.org/r/grub/trunk/grub user@stroj:~$ ls grub user@stroj:~$ mkdir grub-git user@stroj:~$ pushd grub-git ~/grub-git ~ user@stroj:~/grub-git$ bzr fast-export --plain -r 1..15 ../grub | git fast-import
Pokud chcete narvat do gitu repozitář celý se vším všudy, tak stačí vypustit parametr -r
. Při aktualizaci git repozitáře z bzr se nemusíte obávat, že by při importu došlo k nějakým duplicitám. Také můžete pustit příkaz bez udání revize. Vymezením rozsahu revize si však můžete do gitu převést jen to co vás zajímá a krom toho nebude s importem problém, pokud máte v git repozitáři už nějaké své větve. Takže jen doplním jak zjistit v bzr číslo poslední revize a číslo poslední revize odpovídající té, která byla naposled naimportovaná do gitu..
user@stroj:~$ bzr log -r revno:-1.. http://bzr.savannah.gnu.org/r/grub/trunk/grub | grep revno revno: 3096 user@stroj:~$ pushd grub-git ~/grub-git ~ user@stroj:~/grub-git$ git checkout master Switched to branch 'master' user@stroj:~/grub-git$ popd user@stroj:~$ LASTTIMESTAMP="$(git log -1 | grep Date 2> /dev/null)" user@stroj:~$ TIMESTAMP="${LASTTIMESTAMP#* }" user@stroj:~$ TIMEREVISION="$(date --date="${TIMESTAMP%%\ +*}" "+%F %T")" user@stroj:~$ pushd grub ~/grub ~ user@stroj:~/grub$ bzr log -r date:"$TIMEREVISION" | grep revno | awk '{print $2}' 3096
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.