Potrzebowałem tego również i przy pomocy odpowiedzi Bombe + trochę błąkania się, udało mi się. Oto przepis:
Importuj Git -> Subversion
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
Po # 3 otrzymasz tajemniczą wiadomość:
Używając wyższego poziomu adresu URL: protocol:///path/to/repo/PROJECT => protocol:///path/to/repo
Zignoruj to.
Po uruchomieniu nr 5 możesz mieć konflikty. Rozwiąż je, dodając pliki ze stanem „unmerged” i wznawiając rebase. W końcu skończysz; następnie zsynchronizuj z repozytorium SVN, używając dcommit
. To wszystko.
Synchronizacja repozytoriów
Możesz teraz synchronizować z SVN do Git, używając następujących poleceń:
git svn fetch
git rebase trunk
Aby zsynchronizować dane z Git do SVN, użyj:
git svn dcommit
Ostatnia uwaga
Możesz wypróbować to na lokalnej kopii, zanim zastosujesz się do repozytorium na żywo. Możesz zrobić kopię swojego repozytorium Git w tymczasowym miejscu; po prostu użyj cp -r
, ponieważ wszystkie dane znajdują się w samym repozytorium. Następnie można skonfigurować repozytorium testowe oparte na plikach, używając:
svnadmin create /home/name/tmp/test-repo
I sprawdź kopię roboczą, używając:
svn co file:///home/name/tmp/test-repo svn-working-copy
To pozwoli ci bawić się przedmiotami przed wprowadzeniem jakichkolwiek trwałych zmian.
Dodatek: Jeśli popsuniesz git svn init
Jeśli przypadkowo uruchomisz git svn init
z niewłaściwym adresem URL i nie jesteś wystarczająco inteligentny, aby wykonać kopię zapasową swojej pracy (nie pytaj ...), nie możesz po prostu ponownie uruchomić tego samego polecenia. Możesz jednak cofnąć zmiany, wydając:
rm -rf .git/svn
edit .git/config
I usuń sekcję [svn-remote "svn"]
sekcji.
Następnie możesz uruchomić od git svn init
nowa.