SlideShare a Scribd company logo
Subversion Day
Using Subversion and Git Together




        June 14th 2012, Berlin
About Us
●
    TMate Software
●
    We create VCS tools since year 2003
●
    Products at pre-release stage
    ●
        SubGit (RC, self-hosting for 6 months)
    ●
        HG4J (Beta)
●
    Our mature products:
    ●
        SvnKit (1.7.4, 30% of the ASF requests)
    ●
        SqlJet (1.1.2)
Subversion and Git
●
    Subversion:
    ●
        Mature, well known and widely used
    ●
        Centralized
    ●
        Manager-friendly
●
    Git:
    ●
        Fast growing VCS
    ●
        Distributed
    ●
        Geek-friendly
Subversion and Git

                 server




●
    Single repository at         ●
                                     Many repositories
    shared centralized server
                                 ●
                                     Forks
●
    All branches and forks are
    in the same repository       ●
                                     Delayed commits
Subversion and Git



How is it possible to use both?!
Two Approaches


Git-Svn
   or SubGit
Git-Svn Approach
         overview

server              server
Git-Svn Approach
client-side, partisan deployment


                    server




               User 1        User 2
Git-Svn Approach
double translation, resulting in data loss


                           server




2. pull:                                     1. push:
  Svn to Git                                   Git to Svn



                  User 1            User 2
Git-Svn Approach
  custom non-Git workflow
             Git-Svn commands:
    server   ●  fetch
             ● dcommit

             ● rebase

             ● branch

              ...



User 1
Git-Svn Approach
               custom non-Git workflow

Standard Git push:
                                                       - local commit


                                                       - remote commit




 local state    git pull,              git push,
                merge commit created   new commits pushed
Git-Svn Approach
               custom non-Git workflow

Git-Svn dcommit:




 local state    git svn dcommit,        git svn dcommit,   git svn dcommit,
                requires rebase first   (commit)           (fetchback, sign)
Git-Svn Approach
                    summary
●
    Client side
●
    Each user needs to translate at least part of
    the repository
●
    Non-standard workflow
●
    Part of standard Git package, but...
●
    …git-svn is 5000 lines script of perl code
SubGit
         overview

                    subgit


server
SubGit
                approach details
●
    Installed into repository
●
    Uses hooks
●
    Translation is performed in the background
    to minimize overhead
SubGit
                  default installation
Server



         Subversion                       svn pre-commit hook

                      SubGit
                      translation
                      daemon
                                               git pre-receive hook




                                               git post-receive hook


                                    Git
SubGit
     Apache configuration example
<Location /svn>
   # http://repos.host.com/svn/project
   DAV Svn
   SVNParentPath /var/svn/repos
   Require valid-user
   AuthType Basic
   AuthUserFile /var/svn/repos/passwords
</Location>
<Location /git>
   # http://repos.host.com/git/project
   ScriptAlias /git/ …
   …
   Require valid-user
   AuthType Basic
   AuthUserFile /var/svn/repos/passwords
</Location>
SubGit
       asynchronous translation
                     svn      subgit                       git


    data transfer


                                   translation scheduled
     pre-commit

revision installed
                                   revision added to
    post-commit                    SubGit translation queue




                                                     git commit created
SubGit
         asynchronous translation
                      git      subgit                       svn


      data transfer


                                    translation scheduled
       pre-receive

references updated

      post-receive                  commit(s) added to
                                    SubGit translation queue




                                                    svn revision created
SubGit
asynchronous translation
  git      subgit     svn
SubGit
                   summary
●
    Server side
●
    One-time centralized deployment
●
    Reuse of existing infrastructure
●
    Pure Git/Subversion experience
●
    Safe and smooth migration
●
    Commercial quality tool
SubGit
         safe migration

subgit
SubGit
                   smooth migration
VCS transparency




                      “Clean cut”     Git adoption   t
                      migration
VCS transparency




                      SubGit smooth                  t
                      migration
Subversion<=>Git Translation

●
    Branches and Tags     ●
                              References
●
    Deltas                ●
                              Trees
●
    Special properties    ●
                              Special files
●
    Merge tracking info   ●
                              Commit parents
Branches and Tags
                  overview
                    master   1.1.x   1.0.x
/trunk
/branches
/branches/1.0.x
/branches/1.1.x
/tags
/tags/1.0.0
                                             1.0.0



--- r10
M /branches/1.0.x/file.txt
Branches and Tags
            mapping

trunk = trunk:refs/heads/master
branches = branches/*:refs/heads/*
tags = tags/*:refs/tags/*

shelves = shelves/*:refs/shelves/*
Branches and Tags
master

            Which history line is a trunk?

            And which is a branch?


            Heuristics help!
Branches and Tags
               shelves
master


             Unnamed Git branch

                   /shelves/author[_date]



                   --- r20
                   M /shelves/alex/file.txt
Branches and Tags
                  attic references
master   branch      master          master

                                              attic/
                                              branch
Braches and Tags
●
    From Subversion to Git
    ●
      Single Subversion revision might be
      translated to multiple Git commits
●
    From Git to Subversion
    ●
        Heuristics help to detect target
        branch in complex cases
    ●
        /shelves directory is used to store
        anonymous branches
Deltas and Trees
●
    Subversion revision is a delta:
      --- r20
      A /trunk/file.txt
      M /trunk/dir/file.txt
      A /trunk/dir/copy.txt
             from /trunk/file.txt@r10
      D /trunk/dir/old_file.txt
●
    Delta tracks copies
●
    Git commit is always a full file tree
Deltas and Trees
●
    From Subversion to Git
    ●
        Relevant part of the delta is applied
        to the parent commit tree

●
    From Git to Subversion
    ●
        Renames and copies are detected at
        translation time
    ●
        Branches and tags creation uses
        copy operation
Special Properties
●
    properties:            ●
                               files:
    ●
        svn:ignore             ●
                                   .gitignore

    ●
        svn:eol-style          ●
                                   .gitattributes
    ●
        svn:mime-type

file.txt                       .gitattributes
    svn:eol-style=native           * text=auto !eol
Special Properties
●
    From Subversion to Git
    ●
      svn:ignore; svn:mime-type and
      svn:eol-style are translated
●
    From Git to Subversion
    ●
        .gitignore and relevant values set
        in .gitattributes are translated
Merge Tracking
Git merge commits:

                     In Git merges are tracked by:

                     ●
                         Natural history

                     ●
                         Merge commits parents

                     ●
                         Merge unit is commit
Merge Tracking
●
    Subversion tracks merges by
    ●
        Natural history
    ●
        Revisions ranges (including cherry-picks)

●
    Merge unit is file or a directory
        /trunk@r100
          svn:mergeinfo=/branches/1.0.x:1-100,105

        /trunk/file.txt@r100
          svn:mergeinfo=/branches/1.0.x/file.txt:102
Merge Tracking
●
    From Subversion to Git
    ●
        Branch-level merges are translated
        to merge commits

●
    From Git to Subversion
    ●
        Merge commits are represented with
        svn:mergeinfo
Not Yet Translated
             (in SubGit 1.0)
●
    Empty directories
●
    Arbitrary properties
●
    Revision properties
●
    Externals references
It Works!
$ svnadmin create repos
....
$ subgit install repos
$ git clone repos git-clone
....
$ svn co svn://host/repos wc
....
SubGit Target Audience
●
    Managers who listen to their Geeks
●
    Hosting providers
●
    Safe and smooth migration



●
    Java 1.5 or newer is needed
●
    Linux, OS X, Windows Server 2003
On SubGit Availabilty
●
    SubGit 1.0 release: June 2012
●
    SubGit is free for Open Source
    and Start-Up Projects
●
    Closed-source projects will have to register
    SubGit (purchase a registration key)

●
    Dedicated technical support for SubGit
Thank you!
●
    SubGit on Web: http://subgit.com/
●
    SubGit on Twitter: @subgit
●
    Page on Google+ (SubGit)
●
    Blog: http://blog.subgit.com/
    ●
        Using Gerrit with Subversion

●
    Thank you! :)

More Related Content

ODP
Subversion in a distributed world
PDF
Getting started with git svn
PDF
SVN 2 Git
PPTX
01 - Git vs SVN
PDF
Git vs Subversion: ¿Cuando elegir uno u otro?
PPTX
Svn vs mercurial vs github
PDF
Subversion to Git Migration
ODP
Git vs svn
Subversion in a distributed world
Getting started with git svn
SVN 2 Git
01 - Git vs SVN
Git vs Subversion: ¿Cuando elegir uno u otro?
Svn vs mercurial vs github
Subversion to Git Migration
Git vs svn

What's hot (18)

PDF
Effective Git
PPTX
From svn to git
PDF
Git Introduction Tutorial
PPTX
Git vs svn
PPTX
Advanced Git Presentation By Swawibe
PDF
Smalltalk on Git
PDF
Git advanced
PPTX
Introduction to Git and Github
PPTX
Git tutorial
PDF
Version Control Systems with git (and github) as an example
PDF
The Source Control Landscape
PDF
Git 入门与实践
PDF
Version Control with Git
PPSX
Git the fast version control system
PDF
Git in 5 Minutes
PDF
Presentacion git
PPTX
Git for a newbie
Effective Git
From svn to git
Git Introduction Tutorial
Git vs svn
Advanced Git Presentation By Swawibe
Smalltalk on Git
Git advanced
Introduction to Git and Github
Git tutorial
Version Control Systems with git (and github) as an example
The Source Control Landscape
Git 入门与实践
Version Control with Git
Git the fast version control system
Git in 5 Minutes
Presentacion git
Git for a newbie
Ad

Similar to Using Subversion and Git Together (20)

PPTX
PDF
Advanced Git Tutorial
KEY
Git Beginner Preso
PPT
Git basic
PDF
PDF
Subversion to Git Migration
PDF
Git and Github - A primer
PPTX
git Technologies
PDF
Git in Eclipse
KEY
Git Tech Talk
ODP
The Fundamentals of Git
PPTX
GIT.pptx
ODP
Git.odp 0
PDF
Git+jenkins+rex presentation
PPTX
Lets git to it
PPTX
Session git
PPT
Migrating to git
Advanced Git Tutorial
Git Beginner Preso
Git basic
Subversion to Git Migration
Git and Github - A primer
git Technologies
Git in Eclipse
Git Tech Talk
The Fundamentals of Git
GIT.pptx
Git.odp 0
Git+jenkins+rex presentation
Lets git to it
Session git
Migrating to git
Ad

Recently uploaded (20)

PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
NewMind AI Monthly Chronicles - July 2025
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
Cloud computing and distributed systems.
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
Approach and Philosophy of On baking technology
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PDF
Agricultural_Statistics_at_a_Glance_2022_0.pdf
PDF
cuic standard and advanced reporting.pdf
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Empathic Computing: Creating Shared Understanding
PDF
Network Security Unit 5.pdf for BCA BBA.
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
Unlocking AI with Model Context Protocol (MCP)
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
NewMind AI Monthly Chronicles - July 2025
Understanding_Digital_Forensics_Presentation.pptx
Cloud computing and distributed systems.
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
Approach and Philosophy of On baking technology
Dropbox Q2 2025 Financial Results & Investor Presentation
Chapter 3 Spatial Domain Image Processing.pdf
Per capita expenditure prediction using model stacking based on satellite ima...
Diabetes mellitus diagnosis method based random forest with bat algorithm
Building Integrated photovoltaic BIPV_UPV.pdf
Spectral efficient network and resource selection model in 5G networks
NewMind AI Weekly Chronicles - August'25 Week I
Agricultural_Statistics_at_a_Glance_2022_0.pdf
cuic standard and advanced reporting.pdf
The AUB Centre for AI in Media Proposal.docx
Empathic Computing: Creating Shared Understanding
Network Security Unit 5.pdf for BCA BBA.
“AI and Expert System Decision Support & Business Intelligence Systems”

Using Subversion and Git Together

  • 1. Subversion Day Using Subversion and Git Together June 14th 2012, Berlin
  • 2. About Us ● TMate Software ● We create VCS tools since year 2003 ● Products at pre-release stage ● SubGit (RC, self-hosting for 6 months) ● HG4J (Beta) ● Our mature products: ● SvnKit (1.7.4, 30% of the ASF requests) ● SqlJet (1.1.2)
  • 3. Subversion and Git ● Subversion: ● Mature, well known and widely used ● Centralized ● Manager-friendly ● Git: ● Fast growing VCS ● Distributed ● Geek-friendly
  • 4. Subversion and Git server ● Single repository at ● Many repositories shared centralized server ● Forks ● All branches and forks are in the same repository ● Delayed commits
  • 5. Subversion and Git How is it possible to use both?!
  • 7. Git-Svn Approach overview server server
  • 8. Git-Svn Approach client-side, partisan deployment server User 1 User 2
  • 9. Git-Svn Approach double translation, resulting in data loss server 2. pull: 1. push: Svn to Git Git to Svn User 1 User 2
  • 10. Git-Svn Approach custom non-Git workflow Git-Svn commands: server ● fetch ● dcommit ● rebase ● branch ... User 1
  • 11. Git-Svn Approach custom non-Git workflow Standard Git push: - local commit - remote commit local state git pull, git push, merge commit created new commits pushed
  • 12. Git-Svn Approach custom non-Git workflow Git-Svn dcommit: local state git svn dcommit, git svn dcommit, git svn dcommit, requires rebase first (commit) (fetchback, sign)
  • 13. Git-Svn Approach summary ● Client side ● Each user needs to translate at least part of the repository ● Non-standard workflow ● Part of standard Git package, but... ● …git-svn is 5000 lines script of perl code
  • 14. SubGit overview subgit server
  • 15. SubGit approach details ● Installed into repository ● Uses hooks ● Translation is performed in the background to minimize overhead
  • 16. SubGit default installation Server Subversion svn pre-commit hook SubGit translation daemon git pre-receive hook git post-receive hook Git
  • 17. SubGit Apache configuration example <Location /svn> # http://repos.host.com/svn/project DAV Svn SVNParentPath /var/svn/repos Require valid-user AuthType Basic AuthUserFile /var/svn/repos/passwords </Location> <Location /git> # http://repos.host.com/git/project ScriptAlias /git/ … … Require valid-user AuthType Basic AuthUserFile /var/svn/repos/passwords </Location>
  • 18. SubGit asynchronous translation svn subgit git data transfer translation scheduled pre-commit revision installed revision added to post-commit SubGit translation queue git commit created
  • 19. SubGit asynchronous translation git subgit svn data transfer translation scheduled pre-receive references updated post-receive commit(s) added to SubGit translation queue svn revision created
  • 21. SubGit summary ● Server side ● One-time centralized deployment ● Reuse of existing infrastructure ● Pure Git/Subversion experience ● Safe and smooth migration ● Commercial quality tool
  • 22. SubGit safe migration subgit
  • 23. SubGit smooth migration VCS transparency “Clean cut” Git adoption t migration VCS transparency SubGit smooth t migration
  • 24. Subversion<=>Git Translation ● Branches and Tags ● References ● Deltas ● Trees ● Special properties ● Special files ● Merge tracking info ● Commit parents
  • 25. Branches and Tags overview master 1.1.x 1.0.x /trunk /branches /branches/1.0.x /branches/1.1.x /tags /tags/1.0.0 1.0.0 --- r10 M /branches/1.0.x/file.txt
  • 26. Branches and Tags mapping trunk = trunk:refs/heads/master branches = branches/*:refs/heads/* tags = tags/*:refs/tags/* shelves = shelves/*:refs/shelves/*
  • 27. Branches and Tags master Which history line is a trunk? And which is a branch? Heuristics help!
  • 28. Branches and Tags shelves master Unnamed Git branch /shelves/author[_date] --- r20 M /shelves/alex/file.txt
  • 29. Branches and Tags attic references master branch master master attic/ branch
  • 30. Braches and Tags ● From Subversion to Git ● Single Subversion revision might be translated to multiple Git commits ● From Git to Subversion ● Heuristics help to detect target branch in complex cases ● /shelves directory is used to store anonymous branches
  • 31. Deltas and Trees ● Subversion revision is a delta: --- r20 A /trunk/file.txt M /trunk/dir/file.txt A /trunk/dir/copy.txt from /trunk/file.txt@r10 D /trunk/dir/old_file.txt ● Delta tracks copies ● Git commit is always a full file tree
  • 32. Deltas and Trees ● From Subversion to Git ● Relevant part of the delta is applied to the parent commit tree ● From Git to Subversion ● Renames and copies are detected at translation time ● Branches and tags creation uses copy operation
  • 33. Special Properties ● properties: ● files: ● svn:ignore ● .gitignore ● svn:eol-style ● .gitattributes ● svn:mime-type file.txt .gitattributes svn:eol-style=native * text=auto !eol
  • 34. Special Properties ● From Subversion to Git ● svn:ignore; svn:mime-type and svn:eol-style are translated ● From Git to Subversion ● .gitignore and relevant values set in .gitattributes are translated
  • 35. Merge Tracking Git merge commits: In Git merges are tracked by: ● Natural history ● Merge commits parents ● Merge unit is commit
  • 36. Merge Tracking ● Subversion tracks merges by ● Natural history ● Revisions ranges (including cherry-picks) ● Merge unit is file or a directory /trunk@r100 svn:mergeinfo=/branches/1.0.x:1-100,105 /trunk/file.txt@r100 svn:mergeinfo=/branches/1.0.x/file.txt:102
  • 37. Merge Tracking ● From Subversion to Git ● Branch-level merges are translated to merge commits ● From Git to Subversion ● Merge commits are represented with svn:mergeinfo
  • 38. Not Yet Translated (in SubGit 1.0) ● Empty directories ● Arbitrary properties ● Revision properties ● Externals references
  • 39. It Works! $ svnadmin create repos .... $ subgit install repos $ git clone repos git-clone .... $ svn co svn://host/repos wc ....
  • 40. SubGit Target Audience ● Managers who listen to their Geeks ● Hosting providers ● Safe and smooth migration ● Java 1.5 or newer is needed ● Linux, OS X, Windows Server 2003
  • 41. On SubGit Availabilty ● SubGit 1.0 release: June 2012 ● SubGit is free for Open Source and Start-Up Projects ● Closed-source projects will have to register SubGit (purchase a registration key) ● Dedicated technical support for SubGit
  • 42. Thank you! ● SubGit on Web: http://subgit.com/ ● SubGit on Twitter: @subgit ● Page on Google+ (SubGit) ● Blog: http://blog.subgit.com/ ● Using Gerrit with Subversion ● Thank you! :)