Drupal subversionförrådet
Transmachina har byggt och underhåller ett antal Drupal-baserade webbplatser. På grund av den aktiva samhälle, uppdateringar till både centrala Drupal kod och moduler kommer ofta och kan ta mycket tid att hålla en Drupal installation up-to-date och säkra. Som ett resultat har Transmachina utvecklat ett Subversion-förråd för att spåra Drupal versioner och har beslutat att göra detta öppet för öppen källkod. Slutförvaret finns på http://svn-drupal.transmachina.net/ och kan läsas med anonym åtkomst. För närvarande alla uppdateringar utförs av Transmachina personal, men vi skulle vara intresserade av frivilliga i samhället för att hjälpa till med denna process.
/ Admin / logs / status eller genom att titta i / modules / Drupal / drupal.info på den rad som börjar "version ="
Vad vi gör
Varje gång en ny version av Drupal görs hämta vi källan och använder Subversion är svn_load_dirs skript för att uppdatera våra 5.x "aktuell" släppa koden till denna nya version. Skriptet lägger automatiskt till nya filer, tar bort tappade ettor och uppdaterar befintliga filer. "Diff" är lagrat i subversion på ett effektivt sätt. Använda ett verktyg som TortoiseSVN kan du snabbt se en översikt över ändringar som görs under varje release. Vi lägger också en kopia av utsättningen som helhet / trunk/drupal/5.10 till exempel.Hur använder jag det?
Starta en ny Drupal-projekt
- Exportera den senaste kopian från förvaret, SVN export http://svn-drupal.transmachina.net/trunk/drupal/5.x mydrupal (detta kommer att skapa en lokal mapp "mydrupal" som du redigerar lokalt.
- Tillsätt mydrupal mappen till din version styrsystem (något bör fungera), till exempel svn add mydrupal sedan svn begå mydrupal-m "Lägga till nya fräscha Drupal installation för myproject"
- Nu kan du installera nya moduler, och även göra ändringar i centrala Drupal filer (du borde verkligen vet vad du gör när du ändrar core-filer)
- Du bör regelbundet bekräfta förändringarna tillbaka till din källa styrsystemet, så att du kan spåra ändringar som du gör och "rulla tillbaka" dessa förändringar om du bryter något.
- När en ny version av Drupal släpps, kommer vi att uppdatera vårt arkiv. Du kan sedan uppdatera din lokala Drupal projekt (utan att förlora din lokala tweaks till Drupal core) genom att köra:
svn merge http://svn-drupal.transmachina.net/trunk/drupal/
Du bör bytahttp://svn-drupal.transmachina.net/trunk/drupal/5.x mydrupal med den version av Drupal som du använder för närvarande säga, "5,10". Detta förfarande kontrollera Transmachina förvaringsplats för alla ändringar från din version av Drupal till den senaste versionen och patchar din arbetskopia med de diffar. - Du bör testa uppgraderingen lokalt och sedan begå ändringarna tillbaka till ditt versionshanteringssystem.
- Du har nu uppgraderat Drupal core utan att förlora alla lokala ändringar!
Uppgradering av befintlig Drupal-projekt
Om du redan kör Drupal och vill helt enkelt uppgradera till den senaste versionen utan att förlora dina lokala ändringar, som är lätt också! Du bör antagligen begå alla lokala ändringar tillbaka till förvaret och tagga ut så att du enkelt kan rulla tillbaka i händelse av ett misstag i följande steg.- Helt enkelt köra:
svn merge http://svn-drupal.transmachina.net/trunk/drupal/
Du bör bytahttp://svn-drupal.transmachina.net/trunk/drupal/5.x mydrupal med den version av Drupal som du använder för närvarande säga, "5,10".
Fler detaljer
Uppdatering slutförvaret
För dem som är intresserade har vi utvecklat ett enkelt skript för att uppdatera vårt Subversion-förråd snabbt efter varje drupal release.#!/bin/sh # $1 drupal version # the base of the WC repobase=/home//drupal/trunk Echo downloading to tmp # remove file so that it doesn't concat rm -f /tmp/drupal-$1.tar.gz # download the relase wget -O /tmp/drupal-$1.tar.gz http://ftp.drupal.org/files/projects/drupal-$1.tar.gz # extract contents to tmp folder tar -C /tmp -xvzf /tmp/drupal-$1.tar.gz echo Loading diff changes into repos svn_load_dirs -svn_username -svn_password http://svn-drupal.transmachina.net/trunk/drupal/5.x . /tmp/drupal-$1 # and now add that relase as-is into subversion too echo Copying new release from $1 to location drupal/$1 cp -R -v /tmp/$1 $repobase/drupal/$1 echo Queuing new release files to svn svn add $repobase/drupal/$1 echo Commiting new release svn commit $repobase/drupal -m "Adding new drupal release $1"
Uppdatera en arbetskopia
Vi har ett skript för att uppdatera alla våra arbetskopior också:#!/bin/sh # $1 drupal version of WC # $2 location of WC drupal root #svn merge --dry-run http://svn-drupal.transmachina.net/trunk/drupal/$1 http://svn-drupal.transmachina.net/trunk/drupal/5.x $2 svn merge http://svn-drupal.transmachina.net/trunk/drupal/$1 http://svn-drupal.transmachina.net/trunk/drupal/5.x $2När du först får detta går, kan det vara värt att köra med - torr-run line istället. Detta alternativ kommer att skriva ut alla de förändringar som kommer att göras till en fungerande kopia utan att egentligen ändra någonting. Om det finns mer än ca 40 uppdateringar och 3-4 konflikter något som förmodligen har gått fel. Om sammanslagningen blir en enda röra av din arbetskopia, kan du försöka
svn revert -R mydrupalatt rekursivt återställa alla lokala ändringar tillbaka till den senaste gången du engagerad i förrådet. I er värsta fall kan du använda TortoiseSVN (endast på Windows tyvärr) att rulla tillbaka en hel installation till en tidigare version - det i princip inte den sista som begåtts förändringar i omvänd ordning.

Kommentarer
David Grant (ej verifierad)
tis, 2008/09/16 23:49
Permanent länk
Great work!
Jag har alltid tänkt att göra detta, och faktiskt alldeles nyligen, jag lägger min Drupal förvar på en SVN-server som är tillgänglig för alla via HTTP (tidigare var mitt arkiv endast tillgänglig via ssh). Jag kommer inte att bry publicera url här dock, eftersom det skulle vatten-och-ner din insats.
Jag publicerade nyligen ett skript för att uppdatera Drupal moduler i ett subversion arbetskatalog . Det är ungefär som svn_load_dirs. Det i princip bara tar bort alla filer i en modul katalog (utom. SVN dirs) och sedan untars den nya modulen. Sen ser på "svn status" produktion och söker efter "M", "?" eller "!" och förbinder, tillägg begår eller remove-begår respektive vilket kommer att ge en modul till en ny version.
Problemet med detta är att jag förlorar min lokala förändringar, dock kan jag alltid göra en "svn log" och slå ihop några gamla ändringar tillbaka in i förrådet. Jag kan göra ett skript för att göra detta också. Eftersom begår budskapet från "uppdatera modulen" steg jag beskrivit ovan är alltid samma autogenererade typ av meddelande, kan jag söka efter dem i svn log produktion och upptäcka vilka förändringar var mina egna. Jag kan sedan automatiskt slå ihop dem tillbaka på toppen av huvudet. :-)