( sz | 2009. 01. 30., p – 12:15 )

0. repositoryról csinálsz backupot, lehetőleg többet
1. svn info-val megnézed, hogy mi az éppen aktuális revision a repositoryban (vigyázva, az egész repo-t nézni, nem trunk-ot vagy valami branchet)
2. kidumpolod a repository-t revision-önként:
for rev in $(seq -w 1 $max_rev) ; do svnadmin dump --incremental $rev >dump_$rev ;done
-w azért, hogy nullák legyenek a szám elején, így az ötös pontban a megfelelő sorrendben való visszatöltés egyszerűbb lesz
3. megkeresed, hogy melyik revision-ben volt a nagy file hozzáadása, azt a dumpot letörlöd
4. létrehozol egy új repositoryt
5. visszatöltöd bele a megmaradt dumpokat:
cat dump* |svadmin load
6. duplán ellenőrzöd te is, kollégák is, hogy minden megvan-e
7. új repot betenni a régi helyére, kliensek régi working copykat törlik, mert nem fog működni, checkoutolnak újra egyet

Ami szívás, hogyha a filmes commit után vannak olyan commitok, amik commit message-ében számszerűen hivatkoztok más revisionökre (pl. merged r123:456 from branch X), akkor ott ezek a számok nem fognak stimmelni. Ezt vagy a dump, vagy az új repository szerkesztésével (svn propedit? ne kérdezd, hogyan, megkoptak az emlékeim) lehet korrigálni, de nehezen automatizálható.

Hogyha a kolléga annyira szerencsétlen volt, hogy a filmes commitban olyat is commitolt, amit meg kellene tartani, akkor szívás. A dumpolt file-ból minden bizonnyal el lehet távolítani a filmet, de hogy pontosan hogyan, és mire kell figyelni, hogy utána azt a dumpot svnadmin load megegye, arról fogalmam sincs.

szerk.: még egy dolog: a 7. pont miatt tanácsos a 0. pont előtt minden függőben lévő változtatást befejezni és becommitolni, különben esetleg fennakadás lehet a régi working copy-ból átvinni a változásokat az újba.