GIT jako klient SVN

No dobra wszyscy wiemy, że GIT jest fajny i wogóle, a w firmie musimy korzystać z SVN. SVN ma swoje zalety, ale wśród nich na pewno brak możliwości lokalnych commitów, brak wygodnego branchowania, czy stashingu(odkładania zmian na później bez commitowania).

GIT SVN

O tym dowiedziałem się stosunkowo niedawno, ale gita można wykorzystać jako klienta subversion. Zasada pracy wygląda tak:

  1. Wyciągamy kod z repozytorium: git svn clone
  2. Pracujemy tak jakbyśmy używali GITa i nie musimy się przejmować ograniczeniami ? czyli możemy poszaleć z branchami, stashami itp.
  3. Możemy normalnie commitować do lokalnego repo przy pomocy git commit
  4. Wrzucamy zmiany do zdalnego repo poprzez git svn dcommit

git svn clone

Pełna składnia powinna wyglądać mniejwięcej tak:

git svn clone http://example.com/svn -T trunk -b branches -t tags

Przy założeniu że nasze repozytorium zawiera klasyczny podział –  w głównym folderze jest branches, tags i trunk.

Gdzie to działa

Na pewno działa to oczywiście w linii komend oraz w TortoiseGit, niestety GitExtensions na razie nie obsługuje svn. Swoje testy przeprowadzałem na maszynie windowsowej. Git svn nie zadziałał gdy miałem lokalne repo(w folderze) utworzone poprzez TortoiseSVN: nie pasował mu wtedy filesystem (używałem BDB).

Tagged ,

7 thoughts on “GIT jako klient SVN

  1. Bartek Szafko ? GIT jako klient SVN…

    Dziękujemy za publikację – Trackback z dotnetomaniak.pl…

  2. dario-g says:

    Nie wiedziałem o tym. Dzięki, przyda się 🙂

  3. tc says:

    Ciekawe czy można pracować korzystając z Git’a i SVN’a równocześnie mieszająć korzystanie z GitExtensions, TortoiseSVN i ew. AnkhSVN.
    Ktoś próbował?

    Ewentualnie czy da się korzystać Git’a (GitExtensions lub command line) lokalnie a do firmowego SVN’a wrzucać np. TortoisSVN’em (albo AnkSVN)??

    Inna kwestia to rozwiązywanie konfliktów kiedy commit’ujesz do SVN’a (poleceniem “git svn dcommit”).

    Lub ten sam problem gdy robisz clone (tzw. SVN’owy update) z SVN’a.

    Ma ktoś doświadczenia?
    Nie chcę “rozwalić” firmowego SVN’a, a przyznam, że boję się, bo nawet zwykły TortoiseSVN ma często problemy ze sobą, więc wybrażam sobie, że jak dojdzie nad SVN’em kolejna warstwa “Bóg wie jak (nie)kompatybilna” to będzie dopiero jazda.

  4. tc says:

    Aaaa, no i oczywiście problemy pewnie powstają gdy zrobi się rename/move pliku lub katalogu w Git lub SVN.

  5. niestety mieszać się nie da – jeśli masz lokalne repo gita to musisz używać gita, tak samo jak nie możesz użyć tortoisesvn dla kopii lokalnej wyciągniętej z cvs.

    szczerze mowiąc nie testowałem co by się stało z konfliktami – może spróbujesz?

    możesz uzyć lokalnej kopii svn stworzonej przy pomocy svnsync i przetestować wszystkie scenariusze o których piszesz.

    a jeśli chodzi o mergowanie branchy to polecam svnmerge

  6. To jest bardzo wygodne rozwiązanie, stosowałem je do jednego projektu. Jedynym problemem był brak dobrze rozwiązanych externali.

  7. GoostleeK says:

    Jeśli struktura repozytorium SVN jest klasyczna (trank, branches, tags) to zamiast

    git svn clone http://example.com/svn -T trunk -b branches -t tags

    możemy użyć krótszego zapisu

    git svn clone http://example.com/svn –stdlayout

    lub nawet

    git svn clone http://example.com/svn -s

Leave a Reply

Your email address will not be published. Required fields are marked *