Nie. Najlepszym rozwiązaniem byłoby utworzenie kopii lustrzanej repozytorium svn w dedykowanym repozytorium git.
git svn clone -s http://subversion.example.com/ mysvnclone
cd mysvnclone
git remote add origin [email protected]:project.git
git push origin master
Następnie możesz dodać repozytorium git jako podmoduł do oryginalnego projektu
cd /path/to/gitproject
git submodule add git://example.com/project.git -- svn-project
git add svn-project
git commit -m "Add submodule"
Istnieje jedna różnica pojęciowa między svn: externals a podmodułem git, która może cię zaskoczyć, jeśli podejdziesz do tego z subwersyjnego punktu widzenia. Podmoduł git jest powiązany z wersją, którą mu podasz. Jeśli „upstream” się zmieni, musisz zaktualizować odniesienie do modułu podrzędnego.
Więc kiedy ponownie zsynchronizujemy z wyższą wersją podrzędną:
cd /path/to/mysvnclone
git svn rebase
git push
... projekt git będzie nadal używał oryginalnej wersji, którą wcześniej zatwierdziliśmy. Aby zaktualizować do svn HEAD, musisz użyć
cd /path/to/gitproject/svn-project
git checkout master
git pull
cd ..
git add svn-project
git commit -m"Update submodule"
Właśnie przez to przeszedłem. Robię coś podobnego do rq, ale trochę inaczej. Skonfigurowałem jeden z moich serwerów do obsługi tych klonów git repozytoriów svn, których potrzebuję. W moim przypadku chcę tylko wersje tylko do odczytu i potrzebuję czystego repozytorium na serwerze.
Na serwerze, który uruchamiam:
To konfiguruje moje gołe repozytorium, a następnie mam skrypt cron, aby go zaktualizować:
Wymaga to również fix-svn-refs.sh z http://www.shatow.net/fix-svn-refs.sh Inspiracją była głównie: http://gsocblog.jsharpe.net/archives/12
Nie jestem pewien, dlaczego
git gc
jest tu potrzebny, ale nie mogłem sięgit pull
bez niego obejść.Więc po tym wszystkim możesz użyć podmodułu git zgodnie z instrukcjami rq.
źródło
Obecnie git-svn nie obsługuje svn: externals . Ale są jeszcze dwa inne narzędzia, które mogą Ci pomóc:
SubGit
SubGit jest rozwiązaniem po stronie serwera, umożliwia dostęp Git do repozytorium Subversion i odwrotnie. Możesz zapoznać się z dokumentacją, aby uzyskać więcej informacji, ale ogólnie jest dość łatwy w użyciu SubGit:
Powyższe polecenie wykryje układ gałęzi w projekcie SVN, a następnie utworzy puste repozytorium Git gotowe do odzwierciedlenia projektu SVN. Możesz zostać poproszony o podanie poświadczeń, chyba że są one już zapisane w pamięci podręcznej poświadczeń SVN w katalogu ~ / .subversion. Możesz także dostosować
$GIT_REPO/subgit/authors.txt
mapowanie nazwisk autorów SVN do tożsamości Git.W tej chwili masz repozytorium Subversion podłączone do nowo utworzonego repozytorium Git. SubGit tłumaczy wersję SVN na zatwierdzenie Git na każdym,
svn commit
a zatwierdzenie Git na wersję SVN na każdymgit push
.Wszystko, czego potrzebujesz dalej, to udostępnienie repozytorium Git autorom. W tym celu spójrz na git-http-backend . Następnie możesz dodać utworzone repozytorium Git jako zwykły moduł podrzędny. SubGit jest również dostępny jako dodatek do serwera Bitbucket. Więcej informacji można znaleźć tutaj . Nie ma więc potrzeby używania żadnych zewnętrznych narzędzi, takich jak git-svn lub inne.
SubGit jest oprogramowaniem zastrzeżonym, ale jest bezpłatne dla małych firm (do 10 osób zaangażowanych), projektów akademickich i projektów open source.
SmartGit
SmartGit zastępuje git-svn po stronie klienta. Więcej informacji na temat jego funkcji można znaleźć tutaj .
W szczególności SmartGit obsługuje zarówno moduły podrzędne git, jak i svn: zewnętrzne , możesz je mieszać w swoim repozytorium.
SmartGit jest oprogramowaniem zastrzeżonym, ale jest bezpłatne do użytku niekomercyjnego.
źródło
subgit
( subgit.com/documentation/ ... ), jak ismartgit
obsługiwane sąsvn:externals
w ten sam sposób przez jawny.gitsvnextmodules
plik w kopii roboczej. Oznacza to, że nadal musisz używać tego oprogramowania do pobierania zewnętrznych elementów i nie możesz używać podstawowegogit
narzędzia do pobierania tych zewnętrznych bezpośrednio z zewnętrznego serwera git hub, takiego jakgithub
lubgitlab
. Tak więc źródła udostępnionesnv:externals
na zewnętrznym serwerze git hub nie będą widoczne i możliwe do pobrania bez tego oprogramowania, co nadal stanowi poważny problem.Oprócz tego, co powiedział rq, inną metodą byłoby użycie projektu „externals” innej firmy ( http://nopugs.com/ext-tutorial ), który lepiej naśladuje działanie zewnętrznych odniesień svn. Dzięki zewnętrznym możesz śledzić repozytoria git lub svn i wydaje się łatwiejsze, aby wprowadzić zmiany do tych repozytoriów. Jednak wymaga od członków projektu pobrania i zainstalowania oddzielnego pakietu.
Nie korzystałem jeszcze z modułów podrzędnych ani zewnętrznych; jednak spędziłem kilka godzin na czytaniu o wszystkich alternatywach i wygląda na to, że zewnętrzne będą lepiej pasować do moich potrzeb. Doskonała dyskusja na temat tych i innych niestandardowych metod znajduje się w rozdziale 15 książki „Kontrola wersji za pomocą Git” autorstwa Jona Loeligera ( http://oreilly.com/catalog/9780596520120 ), którą gorąco polecam.
źródło
Piston jest przepisywany, aby obsługiwać to i odwrotnie, a także istniejący adres URL Subversion w repoistorii Subvresion i git + git.
Sprawdź repozytorium tłoków na Githubie .
Niestety wydaje się, że nie został wydany.
źródło
Cóż, jest
git-remote-testsvn
, więc chyba coś takiegopowinno działać. Czy to?
źródło