Howdi
Ich durfte auf der Arbeit ein SVN Server/Mirror aufsetzen.
Da ich alles schnell wieder vergesse schreibe ich das mal hier nieder...
Das ganze ist zwar im
SVN RedBook ziemlich gut beschrieben, allerdings nicht fuer Windows
1. Repository erstellen:
Als erstes muss das Repository erstellt werden
svnadmin create C:\svnrepository\RepositoryName
2. Berechtigung vergeben
Es muss ein User vorhanden sein mit dem die Synchronisation durchgefuehrt wird. Dieser User darf sonst nicht verwendet werden.
3. Hooks registrieren(kopieren)(Sind unter Erweitert vorhanden):
Es braucht zwei hooks. 1.
start-commit, 2.
pre-revprop-change damit nur noch von einem User(Mirror-User) aenderungen am Repository vorgenommen werden koennen.
4. Mirror initialisieren
"C:\Program Files\Subversion\bin\svnsync.exe" initialize http://mirror host/MirrorRepository http://master host/MasterRepository --username user --password password
5. Synchronisation starten
Mit folgender Zeile wird die Synchronisation gestartet. Dies kann man auch auf dem MasterRepository als
post-commit hook einrichten, damit jede aenderung sofort auf das MirrorRepository uebertragen wird.
svnsync synchronize http://mirror host/MirrorRepository --username user --password password
Will man auf sourcen des MirrorRepositorys aenderungen mittels
svn switch --relocate auf das MasterRepository commiten, muss man dafuer die
UUID des MirrorRepository gleich der UUID des MasterRepository setzen.
Dafuer muss man sich zuerst eine Textdatei uuid.txt anlegen, und folgenden Text reinschreiben:
SVN-fs-dump-format-version: 2
UUID: 65390229-12b7-0310-b90b-f21a5aa7ec8e
UUID natuerlich mit der UUID des MasterRepositoy ersetzen, und am Ende des files eine Leerzeile lassen(wieso auch immer)
Danach kann man via cmd die UUID des MirrorRepositoy anpassen:
type uuid.txt | svnadmin load --force-uuid C:\svnrepository\MirrorRepositoy
cheers
manuel
ps: Mir ist klar das Windos boese ist, aber das habe ich auf der Arbeit nicht zu entscheiden

pps: UUID unter windows aendern ist recht tricky. Unter
http://www.nabble.com/svn-relocate-fails-due-to-bad-char-at-end-of-url_uuid-%3Euuid-td13716243.html ist eine Beschreibung zu finden.
hooks
Die .bat files rufen jeweils nur die entsprechenden Phyton files auf.
1.0 start-commit.bat
"C:\Python25\python.exe" "C:\svnrepository\MirrorRepository\hooks\start-commit.py" %1 %2
1.1 start-commit.py
#!C:\Python25\python.exe
"""
Subversion hook which currently checks that the commit is executed by a certain user
Hacked together by Manuel Kaderli
$Id$
"""
import sys, os, string
SVNLOOK='"C:\Program Files\Subversion\\bin\svnlook.exe"'
def main(user):
if user != "mirasoft":
sys.stderr.write ("Only the syncuser may change revision properties.\nUser entered:["+user+"]")
sys.exit(1)
else:
sys.exit(0)
if _name_ == '_main_':
if len(sys.argv) < 3:
sys.stderr.write("Usage: %s REPOS TXN\n" % (sys.argv[0]))
else:
main(sys.argv[2])
2.1 pre-revprop-change.bat
"C:\Python25\python.exe" "C:\svnrepository\MirrorRepositoy\hooks\pre-revprop-change.py" %1 %2 %3
2.2 pre-revprop-change.py
#!C:\Python25\python.exe
"""
Subversion pre-commit hook which currently checks that the commit is done by only one user.
Hacked together by Jacques Marneweck
Adapted for Windows by Quan Eastin and
Jim Pickering
$Id$
"""
import sys, os, string
SVNLOOK='"C:\Program Files\Subversion\\bin\svnlook.exe"'
def main(repos, txn, user):
log_cmd = '%s log -t %s %s' % (SVNLOOK, txn, repos)
log_msg = os.popen(log_cmd, 'r').readline().rstrip('\n')
if user != "mirasoft":
sys.stderr.write ("Only the syncuser may change revision properties.\nUser entered:["+user+"]")
sys.exit(1)
else:
sys.exit(0)
if _name_ == '_main_':
if len(sys.argv) < 3:
sys.stderr.write("Usage: %s REPOS TXN\n" % (sys.argv[0]))
else:
main(sys.argv[1],sys.argv[2],sys.argv[3])
Leider brauchen noch 1.4 und müssen somit auch noch diesen Weg gehen.
Um Änderungen vom Slave zum Master zu commiten gibts keine schönere Möglichkeit oder?
Es gibt noch Komerzielle Tools, allerdings sind die ziemlich teuer und schwer zu konfigurieren.
Wenn ihr die Möglichkeit braucht "distributet" zu arbeiten würde ich evt. mal git anschauen. Sieht gut aus, allerdings gibt es dort kein Master Repository mehr.
Gruss
Manuel