SVN nagy fájl végleges eltávolítása

Fórumok

SVN-be az egyik kollégám becommitált néhány filmet is régen. Azóta volt ~700 egyéb változtatás amit nem szeretnék elveszíteni.
Tehát: Szeretném kivenni a nagy fájlt úgy, hogy a history megmaradjon, és az SVN mérete csökkenjen a nagy fájllal.

Tudtok rá valami megoldást? :-)

Hozzászólások

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.

erre a celra dump utan hasznalj inkabb svndumpfiltert - joval egyszerubb ha egy adott fajlt/utvonalat ki akarsz szurni a dumpbol:

svnadmin dump /repo/path > myrepo.dmp
svndumpfilter exlude path/to/the/bigfile1 path/to/the/bigfile2 ... > myrepo_filtered.dmp
mkdir /newrepo/path
svnadmin create /newrepo/path
svnadmin load /newrepo/path < myrepo_filtered.dmp

ha minden kötél szakad, akkor a film helyére egy üres fájlt beraksz.