2009-11-07 11 views
15

Quale sarebbe il modo migliore per impostare un git mirror di sola lettura di un repository svn esistente e impostare ganci post-commit in modo tale che ogni volta che qualcuno si impegna a svn, il git mirror viene aggiornato automaticamente? Principalmente, mi piacerebbe eseguire git-svn clone una sola volta, sul server, e quindi permettere alle persone di uscire da git senza dover git-svn clonare l'intero repository svn.git mirror di sola lettura di un repository svn

risposta

4

Lo faccio su un progetto che utilizza SVN (che spinge su un repository pubblico su github). Non ho uno SVN commit hook, ma questo su un processo di cron:

#!/bin/bash 

repo=/path/to/my-mirror.git 
lockfile="$repo/cron-lock" 

if ! lockfile -r1 "$lockfile";then 
     exit 1 
fi 

export GIT_DIR=$repo 
# update refs/remotes/git-svn: 
git svn fetch -q 
# make 'master' match the git-svn branch: 
git fetch "$repo" refs/remotes/git-svn:refs/heads/master 
# publish to github 
git push github master 

rm -f "$lockfile" 

Se si attiva questo da uno SVN commit hook al posto di un lavoro cron, dovrebbe funzionare.

Ovviamente, è necessario impostare un telecomando chiamato github utilizzando git remote add github [...]. Il repository git che sto usando è un repository "bare" (vedi git init --bare).

+0

grazie, github sembra la via da percorrere –

2

Il modo migliore per impostare un mirror Svn/Git (scrivibile) sarebbe utilizzare SubGit - questo è uno strumento sviluppato appositamente per questa attività. Disclaimer: sono lo sviluppatore di questo strumento.

+0

bello, grazie –

+1

Inoltre, SubGit 2.0 non ha più bisogno di accesso locale al repository Subversion e potrebbe creare anche un mirror Git scrivibile di un repository Subversion remoto (vedi http: // subgit.com/eap). –

+2

@AlexanderKitaev Si prega di notare che è necessario rivelare la propria affiliazione quando si collega a un prodotto o un altro sito web. Vedo da [questo post] (http://stackoverflow.com/a/13288270/2057919) che hai sviluppato SubGit. Ho modificato questa risposta per riflettere questo. In futuro, assicurati di menzionare la tua connessione se ti colleghi a SubGit. –

Problemi correlati