This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Also update the $VERSION of ExtUtils::MM_Unix, else MM_Unit.t fails following
[perl5.git] / pod / perlrepository.pod
CommitLineData
d7dd28b6
LB
1=head1 NAME
2
3perlrepository - Using the Perl source repository
4
5=head1 SYNOPSIS
6
7All of Perl's source code is kept centrally in a Git repository. The
8repository contains many Perl revisions from Perl 1 onwards and all
9the revisions from Perforce, the version control system we were using
10previously. This repository is accessible in different ways.
11
12The full repository takes up about 80MB of disk space. A check out of
d9847473
RGS
13the blead branch (that is, the master branch, which contains bleadperl,
14the development version of perl 5) takes up about 160MB of disk space
15(including the repository). A build of bleadperl takes up about 200MB
16(including the repository and the check out).
d7dd28b6
LB
17
18=head1 GETTING ACCESS TO THE REPOSITORY
19
20=head2 READ ACCESS VIA THE WEB
21
22You may access this over the web. This allows you to browse the tree,
23see recent commits, search for particular commits and more. You may
24access it at:
25
26 http://perl5.git.perl.org/perl.git
27
28=head2 READ ACCESS VIA GIT
29
30You will need a copy of Git for your computer. You can fetch a copy of
31the repository using the Git protocol (which uses port 9418):
32
3b8a5fb0 33 git clone git://perl5.git.perl.org/perl.git perl-git
d7dd28b6 34
3b8a5fb0 35This clones the repository and makes a local copy in the 'perl-git'
d7dd28b6
LB
36directory.
37
38If your local network does not allow you to use port 9418, then you can
572f57ba 39fetch a copy of the repository over HTTP (this is slower):
d7dd28b6 40
3b8a5fb0 41 git clone http://perl5.git.perl.org/perl.git perl-http
d7dd28b6 42
3b8a5fb0 43This clones the repository and makes a local copy in the 'perl-http'
d7dd28b6
LB
44directory.
45
46=head2 WRITE ACCESS TO THE REPOSITORY
47
48If you are a committer, then you can fetch a copy of the repository that
49you can push back on with:
50
3b8a5fb0 51 git clone ssh://perl5.git.perl.org/gitroot/perl.git perl-ssh
d7dd28b6 52
3b8a5fb0 53This clones the repository and makes a local copy in the 'perl-ssh'
d7dd28b6
LB
54directory.
55
1a0f15d5 56If you clone using git, which is faster than ssh, then you will need to
d9847473 57modify your config in order to enable pushing. Edit F<.git/config> where
1a0f15d5
YO
58you will see something like:
59
60 [remote "origin"]
61 url = git://perl5.git.perl.org/perl.git
62
63change that to something like this:
64
65 [remote "origin"]
66 url = ssh://perl5.git.perl.org/gitroot/perl.git
67
68NOTE: there are symlinks set up so that the /gitroot is actually optional.
d7dd28b6
LB
69
70=head1 OVERVIEW OF THE REPOSITORY
71
72Once you have changed into the repository directory, you can inspect it.
73
d7dd28b6 74
39219fd3
YO
75After a clone the repository will contain a single local branch, which
76will be the current branch as well, as indicated by the asterix.
77
78 % git branch
79 * blead
80
d9847473 81Using the -a switch to branch will also show the remote tracking branches in the
39219fd3
YO
82repository:
83
d9847473 84 % git branch -a
09081495 85 * blead
d7dd28b6
LB
86 origin/HEAD
87 origin/blead
88 ...
89
39219fd3 90The branches that begin with "origin" correspond to the "git remote" that
d9847473
RGS
91you cloned from (which is named "origin"). Each branch on the remote will
92be exactly tracked by theses branches. You should NEVER do work on these
93remote tracking branches. You only ever do work in a local branch. Local
94branches can be configured to automerge (on pull) from a designated remote
95tracking branch. This is the case with the default branch C<blead> which
96will be configured to merge from the remote tracking branch
97C<origin/blead>.
39219fd3 98
d7dd28b6
LB
99You can see recent commits:
100
c2cf2042 101 % git log
d7dd28b6 102
23f8d33e 103And pull new changes from the repository, and update your local repository
39219fd3 104(must be clean first)
d7dd28b6
LB
105
106 % git pull
09081495 107
39219fd3
YO
108Assuming we are on the branch C<blead> immediately after a pull, this command
109would be more or less equivalent to:
110
111 % git fetch
112 % git merge origin/blead
113
114In fact if you want to update your local repository without touching your working
115directory you do:
116
117 % git fetch
118
d9847473
RGS
119And if you want to update your remote-tracking branches for all defined remotes
120simultaneously you can do
39219fd3
YO
121
122 % git remote update
123
124Neither of these last two commands will update your working directory, however
d9847473 125both will update the remote-tracking branches in your repository.
39219fd3 126
09081495
LB
127To switch to another branch:
128
129 % git checkout origin/maint-5.8-dor
130
131To switch back to blead:
132
133 % git checkout blead
c2cf2042 134
39219fd3
YO
135=head2 FINDING OUT YOUR STATUS
136
137The most common git command you will use will probably be
138
139 % git status
140
23f8d33e 141This command will produce as output a description of the current state of the
39219fd3 142repository, including modified files and unignored untracked files, and in addition
23f8d33e
YO
143it will show things like what files have been staged for the next commit,
144and usually some useful information about how to change things. For instance the
39219fd3
YO
145following:
146
147 $ git status
148 # On branch blead
149 # Your branch is ahead of 'origin/blead' by 1 commit.
150 #
151 # Changes to be committed:
152 # (use "git reset HEAD <file>..." to unstage)
153 #
154 # modified: pod/perlrepository.pod
155 #
156 # Changed but not updated:
157 # (use "git add <file>..." to update what will be committed)
158 #
159 # modified: pod/perlrepository.pod
160 #
161 # Untracked files:
162 # (use "git add <file>..." to include in what will be committed)
163 #
164 # deliberate.untracked
165
166This shows that there were changes to this document staged for commit, and
167that there were further changes in the working directory not yet staged. It
168also shows that there was an untracked file in the working directory, and as
169you can see shows how to change all of this. It also shows that there
170is one commit on the working branch C<blead> which has not been pushed to the
23f8d33e 171C<origin> remote yet. B<NOTE>: that this output is also what you see as a
d9847473 172template if you do not provide a message to C<git commit>.
7f6effc7
YO
173
174Assuming we commit all the mentioned changes above:
175
176 % git commit -a -m'explain git status and stuff about remotes'
177 Created commit daf8e63: explain git status and stuff about remotes
178 1 files changed, 83 insertions(+), 3 deletions(-)
179
180We can re-run git status and see something like this:
181
182 % git status
183 # On branch blead
184 # Your branch is ahead of 'origin/blead' by 2 commits.
185 #
186 # Untracked files:
187 # (use "git add <file>..." to include in what will be committed)
188 #
189 # deliberate.untracked
190 nothing added to commit but untracked files present (use "git add" to track)
191
39219fd3 192
23f8d33e 193When in doubt, before you do anything else, check your status and read it
39219fd3
YO
194carefully, many questions are answered directly by the git status output.
195
c2cf2042
LB
196=head1 SUBMITTING A PATCH
197
198If you have a patch in mind for Perl, you should first get a copy of
199the repository:
200
201 % git clone git://perl5.git.perl.org/perl.git perl-git
202
203Then change into the directory:
204
205 % cd perl-git
206
12322d22 207Alternatively, if you already have a Perl repository, you should
f5445761 208ensure that you're on the I<blead> branch, and your repository
12322d22
A
209is up to date:
210
211 % git checkout blead
212 % git pull
213
214Now that we have everything up to date, we need to create a temporary new
215branch for these changes and switch into it:
b1fccde5 216
a9b05323 217 % git checkout -b orange
23f8d33e 218
a9b05323
YO
219which is the short form of
220
b1fccde5
LB
221 % git branch orange
222 % git checkout orange
223
c2cf2042
LB
224Then make your changes. For example, if Leon Brocard changes his name
225to Orange Brocard, we should change his name in the AUTHORS file:
226
227 % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
228
229You can see what files are changed:
230
231 % git status
232 # On branch blead
233 # Changes to be committed:
234 # (use "git reset HEAD <file>..." to unstage)
235 #
236 # modified: AUTHORS
237 #
238
c2cf2042
LB
239And you can see the changes:
240
241 % git diff
242 diff --git a/AUTHORS b/AUTHORS
243 index 293dd70..722c93e 100644
244 --- a/AUTHORS
245 +++ b/AUTHORS
7df2e4bc 246 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
c2cf2042
LB
247 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
248 Leif Huhn <leif@hale.dkstat.com>
249 Len Johnson <lenjay@ibm.net>
250 -Leon Brocard <acme@astray.com>
251 +Orange Brocard <acme@astray.com>
252 Les Peters <lpeters@aol.net>
253 Lesley Binks <lesley.binks@gmail.com>
254 Lincoln D. Stein <lstein@cshl.org>
255
256Now commit your change locally:
257
258 % git add AUTHORS
259 % git commit -m 'Rename Leon Brocard to Orange Brocard'
260 Created commit 6196c1d: Rename Leon Brocard to Orange Brocard
261 1 files changed, 1 insertions(+), 1 deletions(-)
262
263Now you should create a patch file for all your local changes:
264
2af192ee 265 % git format-patch origin
c2cf2042
LB
266 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
267
268You should now send an email to perl5-porters@perl.org with a
269description of your changes, and attach this patch file as an
270attachment.
271
b1fccde5
LB
272If you want to delete your temporary branch, you may do so with:
273
274 % git checkout blead
275 % git branch -d orange
276 error: The branch 'orange' is not an ancestor of your current HEAD.
277 If you are sure you want to delete it, run 'git branch -D orange'.
278 % git branch -D orange
279 Deleted branch orange.
7df2e4bc
LB
280
281=head1 ACCEPTING A PATCH
282
283If you have received a patch file generated using the above section,
284you should try out the patch.
285
286First we need to create a temporary new branch for these changes and
287switch into it:
288
a9b05323 289 % git checkout -b experimental
7df2e4bc
LB
290
291Now we should apply the patch:
292
2af192ee 293 % git am 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
7df2e4bc
LB
294 Applying Rename Leon Brocard to Orange Brocard
295
296Now we can inspect the change:
297
298 % git log
299 commit b1b3dab48344cff6de4087efca3dbd63548ab5e2
300 Author: Leon Brocard <acme@astray.com>
301 Date: Fri Dec 19 17:02:59 2008 +0000
302
303 Rename Leon Brocard to Orange Brocard
304 ...
305
306 % git diff blead
307 diff --git a/AUTHORS b/AUTHORS
308 index 293dd70..722c93e 100644
309 --- a/AUTHORS
310 +++ b/AUTHORS
311 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
312 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
313 Leif Huhn <leif@hale.dkstat.com>
314 Len Johnson <lenjay@ibm.net>
315 -Leon Brocard <acme@astray.com>
316 +Orange Brocard <acme@astray.com>
317 Les Peters <lpeters@aol.net>
318 Lesley Binks <lesley.binks@gmail.com>
319 Lincoln D. Stein <lstein@cshl.org>
320
321If you are a committer to Perl and you think the patch is good, you can
75fb7651 322then merge it into blead then push it out to the main repository:
7df2e4bc
LB
323
324 % git checkout blead
d9847473 325 % git merge experimental
75fb7651 326 % git push
7df2e4bc
LB
327
328If you want to delete your temporary branch, you may do so with:
329
330 % git checkout blead
331 % git branch -d experimental
332 error: The branch 'experimental' is not an ancestor of your current HEAD.
333 If you are sure you want to delete it, run 'git branch -D experimental'.
334 % git branch -D experimental
335 Deleted branch experimental.