sola lettura specchio git di un repository SVN
-
18-09-2019 - |
Domanda
Quale sarebbe il modo migliore per impostare una sola lettura git specchio di un repository SVN già esistente, e impostare post-commit ganci in modo tale che ogni volta che qualcuno si impegna a SVN, git lo specchio viene aggiornato automaticamente? Soprattutto, mi piacerebbe correre clone git-svn solo una volta, sul server, e poi lasciare che la gente basta controllare da git senza dover clone git-svn l'intero repository svn stessi.
Soluzione
Lo faccio su un progetto che utilizza SVN (spingendo a un repository su GitHub pubblico). 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.
Naturalmente, è necessario impostare una chiamata remota github
utilizzando git remote add github [...]
. Il repository git che sto usando è un repository "nuda" (vedi git init --bare
).
Altri suggerimenti
Il modo migliore per impostare un mirror SVN / Git (scrivibile) potrebbe essere quella di utilizzare SubGit - questo è un strumento appositamente sviluppato per questo compito. Diniego:. Io sono l'autore di questo strumento