Subversion, CVS i wielkie binarki (By³o Re: Znowu locki w CVS)
Michal Moskal
malekith w pld-linux.org
Czw, 5 Gru 2002, 11:55:08 CET
On Wed, Dec 04, 2002 at 11:50:08PM -0500, Filip Kalinski wrote:
> Dnia Wed, Dec 04, 2002 at 10:57:33PM +0100, Mateusz Korniak co nastêpuje:
> > On Thursday 05 of December 2002 04:36, Filip Kalinski wrote:
> >
> > > > ¯eby commity by³y atomowe. (¿eby¶ nie móg³ wyci±gn±æ ¼róde³ w ¶rodku
> > > > commitu) Ale i tak nie s±, znaczy teoretycznie s±, ale tylko w obrêbie
> > > > jednego katalogu ;-) Anyway polecam subversion.
> > >
> > > Który pliki trzyma w bazie danych. Czyni go to bardzo przydatnym do
> > > trzymania wielkich binarek ;-)
> >
> > Sugerujesz ¿e to jaki¶ problem dla wspó³czesnej bazy danych ?
> > Albo ¿e CVS jest pod tym wzglêdem lepszy :) ?
> >
>
> Chodzi o plikow± bazê danych na bibliotece db4. CVS mimo wszytko chyba jest
> lepszy.
*Je¶li* trzymamy binarki w systemie kontroli wersji, to rzeczywi¶cie svn
nie jest dobrym rozwi±zaniem. CVS jest trochê lepszy, ale jak widaæ
równie¿ nie bardzo siê nadaje. *¯aden* system kontroli wersji nie jest
przystosowany do trzymania w nim N-megowych binrek, bo niby po co?
System kontroli wersji s³u¿y do (tadam!) *kontroli wersji* a nie
serwowania plików. Zauwa¿, ¿e 99% tarballi w SOURCES nie wymaga ¿adnego
wersjonowania -- s± one jednoznacznie identyfikowane przez nazwê.
Pozosta³e 1% mo¿na by spokojnie trzymaæ w katalogach z numerem wersji.
Mog³oby to wygl±daæ tak:
SOURCES/ i SPECS/ zostaj± tak jak s± teraz. Tyle ¿e w tarballe w sources
s± zast±pione jakimi¶ ma³ymi plikami z linkiem do ftp/http gdzie s±
prawdziwe tarballe. Np.:
linux-2.4.20.tar.bz2:
#v+
###<PLD Source Link magic>###
kernel/2.4.20/linux-2.4.20.tar.bz2
ftp://ftp.kernel.org/some/path/linux-2.4.20.tar.bz2
#v-
builder je¶li zobaczy '###<PLD Source Link magic>###' w pierwszej linii,
czyta drug±, robi:
wget $(echo $druga | sed 's|^|http://sources.pld.org.pl/tarballs/')
I tyle. Druga linijka mog³aby s³u¿yæ do automatycznego ¶ci±gania ¼róde³
na sources.pld.org.pl.
Potem mo¿na by pomy¶leæ nad rozdzieleniem SPECS/ i SOURCES/ na
podkatalogi dla ka¿dego pakietu, np.:
packages/
foobar/
branches/
head/
foobar.spec
tarballs/
foobar-1.2.3.tar.gz
patches/
foobar-make.patch
devel/
foobar.spec
tarballs/
foobar-2.1.2.tar.gz
patches/
foobar-ac.patch
foobar-make.patch
versions/
1.2.1-1/
foobar.spec
tarballs/
foobar-1.2.1.tar.gz
patches/
1.2.3-1/
foobar.spec
tarballs/
foobar-1.2.1.tar.gz
patches/
foobar-make.patch
W takim schemacie (przewidziany dla subversion, a nie CVS, wyja¶nienia
ni¿ej [1]), wszystkie pliki w */tarballs/ mog± byæ z definicji linkami.
Oczywi¶cie to wszystko wymaga du¿ych zmian w skrypcie builder (musia³by
jako¶ te pliki daæ rpmowi).
[1] SVN repo widoczne jest jako filesystem. Nie ma ¿adanych branczy,
filesystem jest wersjonowany liniowo. Dowcip polega na tym, ¿e
filesystem jest wewnêtrznie reprezentowany jako DAG (skierowany graf
acykliczny) i wykoanie operacji typu
svn cp http://foobar/SOURCES/ http://foobar/SOURCES-copy/
Gdzie SOURECS ma 50M, dodaje do bazy kilkadziesi±t bajtów. Po prostu
SOURCES-copy/ jest linkiem do SOURCES w *wersji* 1423.
Tagi i branche s± wiêc reprezentowane przez katalogi. Jest to IMHO
znacznie bardziej intuicyjne, ni¿ to co mamy w CVS.
--
: Michal Moskal ::::: malekith/at/pld-linux.org : GCS {C,UL}++++$ a? !tv
: PLD Linux ::::::: Wroclaw University, CS Dept : {E-,w}-- {b++,e}>+++ h
Wiêcej informacji o li¶cie dyskusyjnej pld-devel-pl