SlideShare a Scribd company logo
VERSION CONTROL
REINVIGORATED
from Subversion to Git and GitHub
VERSION CONTROL
REINVIGORATED
from Subversion to Git and GitHubfrom Subversion to Git and GitHub
@matthewmccull
matthew@github.com
github.com/training
Who is Matthew?
Open source contributor
Build tool and continuous delivery author
5 year Git evangelist
VP of Training at GitHub
The Change
SVN ☞ GIT
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
— Every manager, ever
If it isn't broke,
don't fix it.
The Radar
Migrating from Subversion to Git and GitHub
Migrating from Subversion to Git and GitHub
July 2011
Technology Radar
Prepared by the ThoughtWorks
Technology Advisory Board
http://www.thoughtworks.com/radar
July 2011
Technology Radar
Prepared by the ThoughtWorks
Technology Advisory Board
http://www.thoughtworks.com/radar
Tools
30. Subversion
31. Git
32. Infrastructure as code
33. Github
34. Caching reverse proxies
35. Splunk
36. Mercurial
37. Message buses without
smarts
38. NoSQL
39. Next gen test tools
40. New Relic beyond Rails
41. TLB
42. Powershell
43. Selenium 2 testing of
mobile websites
44. Deltacloud
45. Vagrant
46. API management services
47. jQuery Mobile
48. Backbone.js
49. Sonar
50. Open source bI tools
51. Gradle
52. Cross platform mobile toolkits
53. ESB
54. VCS with “implicit workflow”
55. Code in configuration
26
16
13
22
12
5
3
32
36
46
53
45
44
37
39
35
38
304
6
56 7669
58
57
7
15
14
25
29
28
27
21
23
17
19
24
18
20 11
9
2
10
31
33
42 41
40 50
47
48
49
51 54
43
55
52
34
1
8
New or Moved
No change
Techniques
1. Progressive enhancement
2. Automate database deployment
3. Platform roadmaps
4. Evolutionary database
5. Emergent design
6. Visualization and metrics
7. Coding architects
8. Evolutionary architecture
9. DevOps
10. Simple performance trending
11. Continuous delivery
12. Concurrency abstractions
and patterns
13. Acceptance test of journeys
14. Categorization & prioritization
of technical debt
15. Continuous deployment
16. Capability modeling
17. Thoughtful caching
18. Iterative data warehousing
19. Build your own radar
20. Event API’s
21. Event driven business intelligence
22. Smart systems
23. Event sourcing
24. Decision driven BI
25. Scrum certification
26. Database based integration
27. Procedure oriented integration
28. Feature branching
29. Manual infrastructure management
Tools
30. Subversion
31. Git
32. Infrastructure as code
33. Github
34. Caching reverse proxies
35. Splunk
36. Mercurial
37. Message buses without
smarts
38. NoSQL
39. Next gen test tools
40. New Relic beyond Rails
41. TLB
42. Powershell
43. Selenium 2 testing of
mobile websites
44. Deltacloud
45. Vagrant
46. API management services
47. jQuery Mobile
48. Backbone.js
49. Sonar
50. Open source bI tools
51. Gradle
52. Cross platform mobile toolkits
53. ESB
54. VCS with “implicit workflow”
55. Code in configuration
26
16
13
22
12
5
3
32
36
46
53
45
44
37
39
35
38
304
6
7
15
14
25
29
28
27
21
23
17
19
24
18
20 11
9
2
10
31
33
42 41
40 50
47
48
49
51 54
43
55
52
34
1
8
New or Moved
No change
Techniques
1. Progressive enhancement
2. Automate database deployment
3. Platform roadmaps
4. Evolutionary database
5. Emergent design
6. Visualization and metrics
7. Coding architects
8. Evolutionary architecture
9. DevOps
10. Simple performance trending
11. Continuous delivery
12. Concurrency abstractions
and patterns
13. Acceptance test of journeys
14. Categorization & prioritization
of technical debt
15. Continuous deployment
16. Capability modeling
17. Thoughtful caching
18. Iterative data warehousing
19. Build your own radar
20. Event API’s
21. Event driven business intelligence
22. Smart systems
23. Event sourcing
24. Decision driven BI
25. Scrum certification
26. Database based integration
27. Procedure oriented integration
28. Feature branching
29. Manual infrastructure management
Tools
30. Subversion
31. Git
32. Infrastructure as code
33. Github
34. Caching reverse proxies
35. Splunk
36. Mercurial
37. Message buses without
smarts
38. NoSQL
39. Next gen test tools
40. New Relic beyond Rails
41. TLB
42. Powershell
43. Selenium 2 testing of
mobile websites
44. Deltacloud
45. Vagrant
46. API management services
47. jQuery Mobile
48. Backbone.js
49. Sonar
50. Open source bI tools
51. Gradle
52. Cross platform mobile toolkits
53. ESB
54. VCS with “implicit workflow”
55. Code in configuration
26
16
13
22
12
5
3
32
36
46
53
45
44
37
39
35
38
304
6
7
15
14
25
29
28
27
21
23
17
19
24
18
20 11
9
2
10
31
33
42 41
40 50
47
48
49
51 54
43
55
52
34
1
8
New or Moved
No change
Techniques
1. Progressive enhancement
2. Automate database deployment
3. Platform roadmaps
4. Evolutionary database
5. Emergent design
6. Visualization and metrics
7. Coding architects
8. Evolutionary architecture
9. DevOps
10. Simple performance trending
11. Continuous delivery
12. Concurrency abstractions
and patterns
13. Acceptance test of journeys
14. Categorization & prioritization
of technical debt
15. Continuous deployment
16. Capability modeling
17. Thoughtful caching
18. Iterative data warehousing
19. Build your own radar
20. Event API’s
21. Event driven business intelligence
22. Smart systems
23. Event sourcing
24. Decision driven BI
25. Scrum certification
26. Database based integration
27. Procedure oriented integration
28. Feature branching
29. Manual infrastructure management
26
16
13
22
12
5
3
32
36
46
53
45
44
37
39
35
38
304
6
56
74
7669
58
57
7
15
14
25
29
28
27
21
23
17
19
24
18
20 11
9
2
10
80
7560
31
33
42 41
40 50
47
48
49
51 54
43
55
52
34
1
8
Ne
No
ation & prioritization
cal debt
us deployment
y modeling
ul caching
data warehousing
Migration
Tools
git-svn
git-svn
Core Git feature
$ git svn clone -s http://yourhost.com/reporoot/
git-svn
Consumes an authors email mapping file
(no author) = Codehaus infra <support@codehaus.org>
sdevijver = Steven Devijver <support@codehaus.org>
markcc = Mark CC <support@codehaus.org>
joe = Joe <support@codehaus.org>
ajtarter = Aaron J Tarter <support@codehaus.org>
liddon = Lidia Donajczyk-Lipinska <support@codehaus.org>
jshickey = Scott Hickey <jshickey@yahoo.com>
HamletDRC = Hamlet D'Arcy <hamletdrc@gmail.com>
aalmiray = Andres Almiray <aalmiray@gmail.com>
blackdrag = Jochen Theodorou <blackdrag@gmx.org>
bob = Boc McWhirter <bob@codehaus.org>
brownj = Jeff Brown <jeff@jeffandbetsy.net>
cstein = Christian Stein <sormuras@gmx.de>
git-svn
Migrates Subversion tags to Git branches
svn2git
Migrating from Subversion to Git and GitHub
$ svn2git http://matthew.com/svnrepos/project1
importing to git
Migrating from Subversion to Git and GitHub
# Publish one branch
$ svn2git http://matthew.com/svnrepos/project1
$ git remote add origin https://github.com/you/project1
$ git push origin master
# Publish all branches and tags
$ svn2git http://matthew.com/svnrepos/svnproject1
$ git clone file://yourpath/svnproject1 gitproject1
$ cd gitproject1
$ git remote add origin https://github.com/you/project1
$ git push --mirror origin
Serving SVN
from Git
Migrating from Subversion to Git and GitHub
$ svn co https://github.com/you/project1/trunk p1svn
Data
Structures
— No engineer, ever
Wow!Version control!
DAG
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
Δ Δ
Δ
Δ ΔΔΔ
Migrating from Subversion to Git and GitHub
Checkin
Checkin Checkin
Checkin
Checkin
Checkin
Checkin
Checkin
Checkin
Checkin
Checkin
Delta storage gets slower as the history of a file gets longer
Migrating from Subversion to Git and GitHub
Copy of the entire tree per commit
Why?
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
hard link to existing identical blobs
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File Cß
zlib deflates each blob at commit
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
zlib deflates the entire repo
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
v1 v2 v3 v4
File A
File B
File C
File A
File B File B
File C
v5
File A
File BFile B
File A File A
File C File C File C
Act I
2100MBbecame
205MB
refs
centralized VCSs use sequential revision numbers
Git uses a SHA-1 hash
Migrating from Subversion to Git and GitHub
40 hex characters
(20 bytes)
9AB223D28B1AA46EF1780B22F304982E39872C34
9AB223D28B1AA46EF1780B22F304982E39872C34
<html>
<body>
<p>This is a test</p>
<img src="http://ai.com/icon.gif">
</body>
</html>
<html>
<body>
<p>This is a test</p>
<img src="http://ai.com/icon.gif">
</body>
</html>
9AB223D28B1AA46EF1780B22F304982E39872C34
‣Blob
‣Tree
‣Commit
‣Tag
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
tree
tree: 7e8b1 web
blob: 9ab16 index.html
a10b3
tree
blob: 8d162 logo.jpg
blob: 51d22 draw.js
7e8b1commit
tree: a10b3
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the web content.
c67db
blob<html>
<body></body>
</html>
9ab16
blob
//Some more javascript
var renderSize
51d22
blob
7D 8D B3 7F BD 12 9F E9
7B 78 9D 3F 5C A6 72 CB
8d162
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
v1 v2 v3
commit
tree: 9a87b
parent: nil
author: Fird
committer: Matthew
message:
Major refactoring
of the Javascript rendering
engine.
c67db
commit
tree: b22c1
parent: c67db
author: Tim
committer: Fird
message:
Minor update to HTML
9bd21
commit
tree: b22c1
parent: 9bd21
author: Johnny
committer: Joe
message:
New language transations
1c2d7
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
RELEASE_1.0 HEAD
bug979branch
commit
c67db
commit
9bd21
commit
1c2d7
commit
8c2d1
commit
1bdcd
commit
2daa1
Git Highlights
Local commits
Content
Tracking
simpler Merges
Start now
git-svn conversion to Git
git-svn bridge to SVN
GitHub SVN URLs
Conversion Options
Migrating from Subversion to Git and GitHub
Thanks!
@matthewmccull
matthew@github.com
github.com/training

More Related Content

What's hot (20)

PDF
Did you git yet?
Michael Fong
 
PPTX
Advanced Git: Functionality and Features
Brent Laster
 
KEY
ICSE2011_SRC
Shane McIntosh
 
PDF
Git training
Jérémy Gobet
 
PDF
Buildtechs
Shane McIntosh
 
PDF
2017 jenkins world
Brent Laster
 
PDF
Deep dark-side of git: How git works internally
SeongJae Park
 
PDF
Identifying Hotspots in Software Build Processes
Shane McIntosh
 
PDF
Identifying Hotspots in the PostgreSQL Build Process
Shane McIntosh
 
PDF
Git Introduction Tutorial
Thomas Rausch
 
PPTX
Introduction to Git and GitHub
Bioinformatics and Computational Biosciences Branch
 
PDF
Git inter-snapshot public
SeongJae Park
 
PDF
Inside GitHub with Chris Wanstrath
SV Ruby on Rails Meetup
 
PDF
Git essentials
Otto Kekäläinen
 
PDF
Docker architecture rework case study
dchaffiol
 
PDF
Intro to git (UT biocomputing 2015)
chenghlee
 
PDF
DO YOU WANT TO USE A VCS
SeongJae Park
 
PDF
Introduction To Git For Version Control Architecture And Common Commands Comp...
SlideTeam
 
PDF
Collaborative development with Git | Workshop
Anuchit Chalothorn
 
PDF
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
Alex Borysov
 
Did you git yet?
Michael Fong
 
Advanced Git: Functionality and Features
Brent Laster
 
ICSE2011_SRC
Shane McIntosh
 
Git training
Jérémy Gobet
 
Buildtechs
Shane McIntosh
 
2017 jenkins world
Brent Laster
 
Deep dark-side of git: How git works internally
SeongJae Park
 
Identifying Hotspots in Software Build Processes
Shane McIntosh
 
Identifying Hotspots in the PostgreSQL Build Process
Shane McIntosh
 
Git Introduction Tutorial
Thomas Rausch
 
Git inter-snapshot public
SeongJae Park
 
Inside GitHub with Chris Wanstrath
SV Ruby on Rails Meetup
 
Git essentials
Otto Kekäläinen
 
Docker architecture rework case study
dchaffiol
 
Intro to git (UT biocomputing 2015)
chenghlee
 
DO YOU WANT TO USE A VCS
SeongJae Park
 
Introduction To Git For Version Control Architecture And Common Commands Comp...
SlideTeam
 
Collaborative development with Git | Workshop
Anuchit Chalothorn
 
"Enabling Googley microservices with gRPC" Riga DevDays 2018 edition
Alex Borysov
 

Similar to Migrating from Subversion to Git and GitHub (20)

PPTX
[Mas 500] Software Development Strategies
rahulbot
 
PDF
My "Perfect" Toolchain Setup for Grails Projects
GR8Conf
 
PDF
Git and git hub
Sebastiaan Deckers
 
PDF
The Source Control Landscape
Lorna Mitchell
 
PDF
Tech thursdays / GIT
Marek Prochera
 
PPTX
Git/Github/Bitbucket@TalkIt. Humber college.
Andrew Romanenco
 
PDF
Introduction to Bazaar
Tim Penhey
 
PDF
Git workflows (Basics)
Roman Kuba
 
PDF
Understanding Distributed Source Control
Lorna Mitchell
 
PDF
Getting Git Right
Sven Peters
 
PPTX
Git
IT Booze
 
PPTX
Git.From thorns to the stars
Strannik_2013
 
PDF
True Git
colleenfry
 
PPT
Introduction to git
Nguyen Van Hung
 
ODP
Introduction to Git
Amit Mathur
 
PPTX
Roslyn on GitHub
Immo Landwerth
 
PDF
Git and Git Workflow Models as Catalysts of Software Development
Lemi Orhan Ergin
 
PDF
CICD_1670665418.pdf
edsonJeancarloRuedaS
 
PDF
SQL Server DevOps Jumpstart
Ori Donner
 
[Mas 500] Software Development Strategies
rahulbot
 
My "Perfect" Toolchain Setup for Grails Projects
GR8Conf
 
Git and git hub
Sebastiaan Deckers
 
The Source Control Landscape
Lorna Mitchell
 
Tech thursdays / GIT
Marek Prochera
 
Git/Github/Bitbucket@TalkIt. Humber college.
Andrew Romanenco
 
Introduction to Bazaar
Tim Penhey
 
Git workflows (Basics)
Roman Kuba
 
Understanding Distributed Source Control
Lorna Mitchell
 
Getting Git Right
Sven Peters
 
Git.From thorns to the stars
Strannik_2013
 
True Git
colleenfry
 
Introduction to git
Nguyen Van Hung
 
Introduction to Git
Amit Mathur
 
Roslyn on GitHub
Immo Landwerth
 
Git and Git Workflow Models as Catalysts of Software Development
Lemi Orhan Ergin
 
CICD_1670665418.pdf
edsonJeancarloRuedaS
 
SQL Server DevOps Jumpstart
Ori Donner
 
Ad

More from Matthew McCullough (20)

PDF
Using Git and GitHub Effectively at Emerge Interactive
Matthew McCullough
 
PDF
All About GitHub Pull Requests
Matthew McCullough
 
PDF
Adam Smith Builds an App
Matthew McCullough
 
PDF
Git's Filter Branch Command
Matthew McCullough
 
PDF
Finding Things in Git
Matthew McCullough
 
PDF
Git and GitHub for RallyOn
Matthew McCullough
 
PDF
Git Notes and GitHub
Matthew McCullough
 
PDF
Build Lifecycle Craftsmanship for the Transylvania JUG
Matthew McCullough
 
PDF
Transylvania JUG Pre-Meeting Announcements
Matthew McCullough
 
PDF
Game Theory for Software Developers at the Boulder JUG
Matthew McCullough
 
PDF
Cascading Through Hadoop for the Boulder JUG
Matthew McCullough
 
PDF
JQuery Mobile
Matthew McCullough
 
PDF
R Data Analysis Software
Matthew McCullough
 
PDF
Please, Stop Using Git
Matthew McCullough
 
PDF
Dr. Strangedev
Matthew McCullough
 
PDF
Jenkins for One
Matthew McCullough
 
PDF
Lean Fluffy Startups
Matthew McCullough
 
PDF
Finding Clojure
Matthew McCullough
 
PDF
Groovy-er Desktop Applications With Griffon
Matthew McCullough
 
PDF
Semantic Rubrication
Matthew McCullough
 
Using Git and GitHub Effectively at Emerge Interactive
Matthew McCullough
 
All About GitHub Pull Requests
Matthew McCullough
 
Adam Smith Builds an App
Matthew McCullough
 
Git's Filter Branch Command
Matthew McCullough
 
Finding Things in Git
Matthew McCullough
 
Git and GitHub for RallyOn
Matthew McCullough
 
Git Notes and GitHub
Matthew McCullough
 
Build Lifecycle Craftsmanship for the Transylvania JUG
Matthew McCullough
 
Transylvania JUG Pre-Meeting Announcements
Matthew McCullough
 
Game Theory for Software Developers at the Boulder JUG
Matthew McCullough
 
Cascading Through Hadoop for the Boulder JUG
Matthew McCullough
 
JQuery Mobile
Matthew McCullough
 
R Data Analysis Software
Matthew McCullough
 
Please, Stop Using Git
Matthew McCullough
 
Dr. Strangedev
Matthew McCullough
 
Jenkins for One
Matthew McCullough
 
Lean Fluffy Startups
Matthew McCullough
 
Finding Clojure
Matthew McCullough
 
Groovy-er Desktop Applications With Griffon
Matthew McCullough
 
Semantic Rubrication
Matthew McCullough
 
Ad

Recently uploaded (20)

PDF
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
PDF
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PDF
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
PPTX
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
PDF
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
PDF
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
PDF
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
PDF
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
PDF
Biography of Daniel Podor.pdf
Daniel Podor
 
PDF
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PDF
July Patch Tuesday
Ivanti
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
DevBcn - Building 10x Organizations Using Modern Productivity Metrics
Justin Reock
 
From Code to Challenge: Crafting Skill-Based Games That Engage and Reward
aiyshauae
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Achieving Consistent and Reliable AI Code Generation - Medusa AI
medusaaico
 
WooCommerce Workshop: Bring Your Laptop
Laura Hartwig
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Exolore The Essential AI Tools in 2025.pdf
Srinivasan M
 
Using FME to Develop Self-Service CAD Applications for a Major UK Police Force
Safe Software
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
What Makes Contify’s News API Stand Out: Key Features at a Glance
Contify
 
HCIP-Data Center Facility Deployment V2.0 Training Material (Without Remarks ...
mcastillo49
 
Fl Studio 24.2.2 Build 4597 Crack for Windows Free Download 2025
faizk77g
 
Biography of Daniel Podor.pdf
Daniel Podor
 
"Beyond English: Navigating the Challenges of Building a Ukrainian-language R...
Fwdays
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
July Patch Tuesday
Ivanti
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 

Migrating from Subversion to Git and GitHub

  • 2. VERSION CONTROL REINVIGORATED from Subversion to Git and GitHubfrom Subversion to Git and GitHub
  • 4. Who is Matthew? Open source contributor Build tool and continuous delivery author 5 year Git evangelist VP of Training at GitHub
  • 10. — Every manager, ever If it isn't broke, don't fix it.
  • 14. July 2011 Technology Radar Prepared by the ThoughtWorks Technology Advisory Board http://www.thoughtworks.com/radar
  • 15. July 2011 Technology Radar Prepared by the ThoughtWorks Technology Advisory Board http://www.thoughtworks.com/radar Tools 30. Subversion 31. Git 32. Infrastructure as code 33. Github 34. Caching reverse proxies 35. Splunk 36. Mercurial 37. Message buses without smarts 38. NoSQL 39. Next gen test tools 40. New Relic beyond Rails 41. TLB 42. Powershell 43. Selenium 2 testing of mobile websites 44. Deltacloud 45. Vagrant 46. API management services 47. jQuery Mobile 48. Backbone.js 49. Sonar 50. Open source bI tools 51. Gradle 52. Cross platform mobile toolkits 53. ESB 54. VCS with “implicit workflow” 55. Code in configuration 26 16 13 22 12 5 3 32 36 46 53 45 44 37 39 35 38 304 6 56 7669 58 57 7 15 14 25 29 28 27 21 23 17 19 24 18 20 11 9 2 10 31 33 42 41 40 50 47 48 49 51 54 43 55 52 34 1 8 New or Moved No change Techniques 1. Progressive enhancement 2. Automate database deployment 3. Platform roadmaps 4. Evolutionary database 5. Emergent design 6. Visualization and metrics 7. Coding architects 8. Evolutionary architecture 9. DevOps 10. Simple performance trending 11. Continuous delivery 12. Concurrency abstractions and patterns 13. Acceptance test of journeys 14. Categorization & prioritization of technical debt 15. Continuous deployment 16. Capability modeling 17. Thoughtful caching 18. Iterative data warehousing 19. Build your own radar 20. Event API’s 21. Event driven business intelligence 22. Smart systems 23. Event sourcing 24. Decision driven BI 25. Scrum certification 26. Database based integration 27. Procedure oriented integration 28. Feature branching 29. Manual infrastructure management
  • 16. Tools 30. Subversion 31. Git 32. Infrastructure as code 33. Github 34. Caching reverse proxies 35. Splunk 36. Mercurial 37. Message buses without smarts 38. NoSQL 39. Next gen test tools 40. New Relic beyond Rails 41. TLB 42. Powershell 43. Selenium 2 testing of mobile websites 44. Deltacloud 45. Vagrant 46. API management services 47. jQuery Mobile 48. Backbone.js 49. Sonar 50. Open source bI tools 51. Gradle 52. Cross platform mobile toolkits 53. ESB 54. VCS with “implicit workflow” 55. Code in configuration 26 16 13 22 12 5 3 32 36 46 53 45 44 37 39 35 38 304 6 7 15 14 25 29 28 27 21 23 17 19 24 18 20 11 9 2 10 31 33 42 41 40 50 47 48 49 51 54 43 55 52 34 1 8 New or Moved No change Techniques 1. Progressive enhancement 2. Automate database deployment 3. Platform roadmaps 4. Evolutionary database 5. Emergent design 6. Visualization and metrics 7. Coding architects 8. Evolutionary architecture 9. DevOps 10. Simple performance trending 11. Continuous delivery 12. Concurrency abstractions and patterns 13. Acceptance test of journeys 14. Categorization & prioritization of technical debt 15. Continuous deployment 16. Capability modeling 17. Thoughtful caching 18. Iterative data warehousing 19. Build your own radar 20. Event API’s 21. Event driven business intelligence 22. Smart systems 23. Event sourcing 24. Decision driven BI 25. Scrum certification 26. Database based integration 27. Procedure oriented integration 28. Feature branching 29. Manual infrastructure management
  • 17. Tools 30. Subversion 31. Git 32. Infrastructure as code 33. Github 34. Caching reverse proxies 35. Splunk 36. Mercurial 37. Message buses without smarts 38. NoSQL 39. Next gen test tools 40. New Relic beyond Rails 41. TLB 42. Powershell 43. Selenium 2 testing of mobile websites 44. Deltacloud 45. Vagrant 46. API management services 47. jQuery Mobile 48. Backbone.js 49. Sonar 50. Open source bI tools 51. Gradle 52. Cross platform mobile toolkits 53. ESB 54. VCS with “implicit workflow” 55. Code in configuration 26 16 13 22 12 5 3 32 36 46 53 45 44 37 39 35 38 304 6 7 15 14 25 29 28 27 21 23 17 19 24 18 20 11 9 2 10 31 33 42 41 40 50 47 48 49 51 54 43 55 52 34 1 8 New or Moved No change Techniques 1. Progressive enhancement 2. Automate database deployment 3. Platform roadmaps 4. Evolutionary database 5. Emergent design 6. Visualization and metrics 7. Coding architects 8. Evolutionary architecture 9. DevOps 10. Simple performance trending 11. Continuous delivery 12. Concurrency abstractions and patterns 13. Acceptance test of journeys 14. Categorization & prioritization of technical debt 15. Continuous deployment 16. Capability modeling 17. Thoughtful caching 18. Iterative data warehousing 19. Build your own radar 20. Event API’s 21. Event driven business intelligence 22. Smart systems 23. Event sourcing 24. Decision driven BI 25. Scrum certification 26. Database based integration 27. Procedure oriented integration 28. Feature branching 29. Manual infrastructure management
  • 18. 26 16 13 22 12 5 3 32 36 46 53 45 44 37 39 35 38 304 6 56 74 7669 58 57 7 15 14 25 29 28 27 21 23 17 19 24 18 20 11 9 2 10 80 7560 31 33 42 41 40 50 47 48 49 51 54 43 55 52 34 1 8 Ne No ation & prioritization cal debt us deployment y modeling ul caching data warehousing
  • 22. $ git svn clone -s http://yourhost.com/reporoot/
  • 23. git-svn Consumes an authors email mapping file
  • 24. (no author) = Codehaus infra <[email protected]> sdevijver = Steven Devijver <[email protected]> markcc = Mark CC <[email protected]> joe = Joe <[email protected]> ajtarter = Aaron J Tarter <[email protected]> liddon = Lidia Donajczyk-Lipinska <[email protected]> jshickey = Scott Hickey <[email protected]> HamletDRC = Hamlet D'Arcy <[email protected]> aalmiray = Andres Almiray <[email protected]> blackdrag = Jochen Theodorou <[email protected]> bob = Boc McWhirter <[email protected]> brownj = Jeff Brown <[email protected]> cstein = Christian Stein <[email protected]>
  • 31. # Publish one branch $ svn2git http://matthew.com/svnrepos/project1 $ git remote add origin https://github.com/you/project1 $ git push origin master
  • 32. # Publish all branches and tags $ svn2git http://matthew.com/svnrepos/svnproject1 $ git clone file://yourpath/svnproject1 gitproject1 $ cd gitproject1 $ git remote add origin https://github.com/you/project1 $ git push --mirror origin
  • 35. $ svn co https://github.com/you/project1/trunk p1svn
  • 37. — No engineer, ever Wow!Version control!
  • 38. DAG
  • 39. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B
  • 40. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B Δ Δ Δ Δ ΔΔΔ
  • 44. Copy of the entire tree per commit
  • 45. Why?
  • 46. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 47. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 48. hard link to existing identical blobs
  • 49. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 50. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File Cß
  • 51. zlib deflates each blob at commit
  • 52. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 53. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 54. zlib deflates the entire repo
  • 55. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 56. v1 v2 v3 v4 File A File B File C File A File B File B File C v5 File A File BFile B File A File A File C File C File C
  • 58. refs
  • 59. centralized VCSs use sequential revision numbers
  • 60. Git uses a SHA-1 hash
  • 64. 9AB223D28B1AA46EF1780B22F304982E39872C34 <html> <body> <p>This is a test</p> <img src="http://ai.com/icon.gif"> </body> </html>
  • 65. <html> <body> <p>This is a test</p> <img src="http://ai.com/icon.gif"> </body> </html> 9AB223D28B1AA46EF1780B22F304982E39872C34
  • 67. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 68. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 69. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 70. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 71. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 72. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 73. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 74. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 75. tree tree: 7e8b1 web blob: 9ab16 index.html a10b3 tree blob: 8d162 logo.jpg blob: 51d22 draw.js 7e8b1commit tree: a10b3 parent: nil author: Fird committer: Matthew message: Major refactoring of the web content. c67db blob<html> <body></body> </html> 9ab16 blob //Some more javascript var renderSize 51d22 blob 7D 8D B3 7F BD 12 9F E9 7B 78 9D 3F 5C A6 72 CB 8d162
  • 76. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 77. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 78. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 79. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 80. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 81. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 82. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 83. v1 v2 v3 commit tree: 9a87b parent: nil author: Fird committer: Matthew message: Major refactoring of the Javascript rendering engine. c67db commit tree: b22c1 parent: c67db author: Tim committer: Fird message: Minor update to HTML 9bd21 commit tree: b22c1 parent: 9bd21 author: Johnny committer: Joe message: New language transations 1c2d7
  • 95. git-svn conversion to Git git-svn bridge to SVN GitHub SVN URLs Conversion Options