Bartek Szafko

all of the bits and pieces

GIT jako klient SVN

with 4 comments

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).

Inne podobne artykuły:

Written by Bartłomiej Szafko

Maj 14th, 2010 at 5:00 am

Posted in Development,GIT

Tagged with ,

1 Trackbacks/Pingbacks

  1. dotnetomaniak.pl

with 4 comments to “GIT jako klient SVN”

Subscribe comments with RSS. TrackBack URL.

  1. dario-g

    14 maj 10 at 09:58

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

  2. tc

    15 lip 10 at 10:27

    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.

  3. tc

    15 lip 10 at 10:29

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

  4. Bartłomiej Szafko

    15 lip 10 at 10:44

    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

Leave a Reply