forked from nirvdrum/svn2git
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathREADME
126 lines (95 loc) · 3.83 KB
/
README
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
== svn2git
+svn2git+ is a tiny utility for migrating projects from Subversion to Git
while keeping the trunk, branches and tags where they should be. It uses
git-svn to clone an svn repository and does some clean-up to make sure
branches and tags are imported in a meaningful way, and that the code checked
into master ends up being what's currently in your svn trunk rather than
whichever svn branch your last commit was in.
=== Examples
Say I have this code in svn:
trunk
...
branches
1.x
2.x
tags
1.0.0
1.0.1
1.0.2
1.1.0
2.0.0
git-svn will go through the commit history to build a new git repo. It will
import all branches and tags as remote svn branches, whereas what you really
want is git-native local branches and git tag objects. So after importing this
project I'll get:
$ git branch
* master
$ git branch -a
* master
1.x
2.x
tags/1.0.0
tags/1.0.1
tags/1.0.2
tags/1.1.0
tags/2.0.0
trunk
$ git tag -l
[ empty ]
After svn2git is done with your project, you'll get this instead:
$ git branch
* master
1.x
2.x
$ git tag -l
1.0.0
1.0.1
1.0.2
1.1.0
2.0.0
Finally, it makes sure the HEAD of master is the same as the current trunk of
the svn repo.
=== Installation
Make sure you have git installed, then install the gem:
$ sudo apt-get install git-core git-svn
$ sudo gem install svn2git
=== Usage
There are a number of ways in which you can create a git repo from an existing
svn repo. The differentiating factor is the svn repo layout. Below is an
enumerated listing of the varying supported layouts and the proper way to
create a git repo from a svn repo in the specified layout.
1. The svn repo is in the standard layout of (trunk, branches, tags) at the
root level of the repo.
$ svn2git http://svn.yoursite.com/path/to/repo trunk=trunk branches=branches tags=tags
2. The svn repo is NOT in standard layout and has only a trunk and tags at the
root level of the repo.
$ svn2git http://svn.yoursite.com/path/to/repo trunk=trunk tags=tags
3. The svn repo is NOT in standard layout and has only a trunk and branches at
the root level of the repo.
$ svn2git http://svn.yoursite.com/path/to/repo trunk=trunk branches=branches
4. The svn repo is NOT in standard layout and has only a trunk at the root
level of the repo.
$ svn2git http://svn.yoursite.com/path/to/repo trunk=trunk
5. The svn repo is NOT in standard layout and has no trunk, branches, or tags
at the root level of the repo. Instead the root level of the repo is
equivalent to the trunk and there are no tags or branches.
$ svn2git http://svn.yoursite.com/path/to/repo rootistrunk=true
The above will create a git repository in the current directory with the git
version of the svn repository. Hence, you need to make a directory that you
want your new git repo to exist in, change into it and then run one of the
above commands. Note that in the above cases the trunk, branches, tags options
are simply folder names relative to the provided repo path. For example if you
specified trunk=foo branches=bar and tags=foobar it would be referencing
http://svn.yoursite.com/path/to/repo/foo as your trunk, and so on. However, in
case 5 it references the root of the repo as trunk.
=== Authors
To convert all your svn authors to git format, create a file somewhere on your
system with the list of conversions to make, one per line, for example:
jcoglan = James Coglan <[email protected]>
stnick = Santa Claus <[email protected]>
Then pass an +authors+ option to +svn2git+ pointing to your file:
svn2git http://repos.com/myproject authors=~/authors.txt
Alternatively, you can place the authors file into ~/.svn2git/authors and
svn2git will load it out of there. This allows you to build up one authors
file for all your projects and have it loaded for each repository that you
migrate.