2009-11-07 10 views
15

Jaki byłby najlepszy sposób skonfigurowania lustra git tylko do odczytu istniejącego repozytorium svn i skonfigurowanie haków po zatwierdzeniu tak, że ilekroć ktoś zobowiąże się do svn, git lustro jest automatycznie aktualizowane? Przede wszystkim chciałbym uruchomić klon git-svn tylko raz, na serwerze, a następnie pozwolić, żeby ludzie po prostu wypisali się z git bez konieczności git-svn sklonowania całego repozytorium svn.tylko do odczytu lustro git z repozytorium svn

Odpowiedz

4

Robię to na projekcie, który używa SVN (przesyłając do publicznego repozytorium na githubie). Nie mam svn commit, ale to na zadanie 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" 

Jeśli wywoła to z SVN commit zamiast crona powinno działać.

Oczywiście musisz skonfigurować pilota o nazwie github, używając git remote add github [...]. Repozytorium git, którego używam, jest repozytorium "gołym" (patrz git init --bare).

+0

dzięki, za pomocą GitHub wydaje droga –

2

Najlepszym sposobem na skonfigurowanie lustra Svn/Git (zapisywalnego) byłoby użycie SubGit - jest to narzędzie opracowane specjalnie do tego zadania. Zastrzeżenie: jestem twórcą tego narzędzia.

+0

piękne, dzięki –

+1

Poza SubGit 2.0 nie potrzebuje lokalny dostęp do repozytorium i może zbudować zapisu Git lustro zdalnego repozytorium zbyt (patrz http: // subgit.com/eap). –

+2

@AlexanderKitaev Należy pamiętać, że należy ujawnić powiązanie podczas łączenia z produktem lub inną witryną. Widzę z [tego posta] (http://stackoverflow.com/a/13288270/2057919), że stworzyłeś SubGit. Zmieniłem tę odpowiedź, aby to odzwierciedlić. W przyszłości pamiętaj o podaniu połączenia, jeśli masz link do SubGit. –