SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
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! :)

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (19)

Effective Git
Effective GitEffective Git
Effective Git
 
From svn to git
From svn to gitFrom svn to git
From svn to git
 
Git Introduction Tutorial
Git Introduction TutorialGit Introduction Tutorial
Git Introduction Tutorial
 
Git vs svn
Git vs svnGit vs svn
Git vs svn
 
Advanced Git Presentation By Swawibe
Advanced Git Presentation By SwawibeAdvanced Git Presentation By Swawibe
Advanced Git Presentation By Swawibe
 
Smalltalk on Git
Smalltalk on GitSmalltalk on Git
Smalltalk on Git
 
Git advanced
Git advancedGit advanced
Git advanced
 
Introduction to Git and Github
Introduction to Git and Github Introduction to Git and Github
Introduction to Git and Github
 
Git introduction
Git introductionGit introduction
Git introduction
 
Git tutorial
Git tutorialGit tutorial
Git tutorial
 
Version Control Systems with git (and github) as an example
Version Control Systems with git (and github) as an exampleVersion Control Systems with git (and github) as an example
Version Control Systems with git (and github) as an example
 
Git
GitGit
Git
 
The Source Control Landscape
The Source Control LandscapeThe Source Control Landscape
The Source Control Landscape
 
Git 入门与实践
Git 入门与实践Git 入门与实践
Git 入门与实践
 
Version Control with Git
Version Control with GitVersion Control with Git
Version Control with Git
 
Git the fast version control system
Git the fast version control systemGit the fast version control system
Git the fast version control system
 
Git in 5 Minutes
Git in 5 MinutesGit in 5 Minutes
Git in 5 Minutes
 
Presentacion git
Presentacion gitPresentacion git
Presentacion git
 
Git for a newbie
Git for a newbieGit for a newbie
Git for a newbie
 

Ähnlich wie Using Subversion and Git Together (20)

Git
GitGit
Git
 
Git
GitGit
Git
 
Advanced Git Tutorial
Advanced Git TutorialAdvanced Git Tutorial
Advanced Git Tutorial
 
Git Beginner Preso
Git Beginner PresoGit Beginner Preso
Git Beginner Preso
 
Git basic
Git basicGit basic
Git basic
 
Git basics
Git basicsGit basics
Git basics
 
Git
GitGit
Git
 
Git
GitGit
Git
 
Subversion to Git Migration
Subversion to Git MigrationSubversion to Git Migration
Subversion to Git Migration
 
Git and Github - A primer
Git and Github - A primerGit and Github - A primer
Git and Github - A primer
 
git Technologies
git Technologiesgit Technologies
git Technologies
 
Git in Eclipse
Git in EclipseGit in Eclipse
Git in Eclipse
 
Git basics
Git basicsGit basics
Git basics
 
Git Tech Talk
Git  Tech TalkGit  Tech Talk
Git Tech Talk
 
The Fundamentals of Git
The Fundamentals of GitThe Fundamentals of Git
The Fundamentals of Git
 
Git
GitGit
Git
 
GIT.pptx
GIT.pptxGIT.pptx
GIT.pptx
 
Git.odp 0
Git.odp 0Git.odp 0
Git.odp 0
 
Git+jenkins+rex presentation
Git+jenkins+rex presentationGit+jenkins+rex presentation
Git+jenkins+rex presentation
 
Lets git to it
Lets git to itLets git to it
Lets git to it
 

Kürzlich hochgeladen

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DaySri Ambati
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piececharlottematthew16
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Manik S Magar
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 

Kürzlich hochgeladen (20)

How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo DayH2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
H2O.ai CEO/Founder: Sri Ambati Keynote at Wells Fargo Day
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Story boards and shot lists for my a level piece
Story boards and shot lists for my a level pieceStory boards and shot lists for my a level piece
Story boards and shot lists for my a level piece
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!Anypoint Exchange: It’s Not Just a Repo!
Anypoint Exchange: It’s Not Just a Repo!
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 

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! :)