/bin/sh isn't /usr/bin/perl :-)
[p5sagit/p5-mst-13.2.git] / pod / perlrepository.pod
CommitLineData
d7dd28b6 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 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 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 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 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 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 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 69
184487f0 70You can also set up your user name and e-mail address. For example
71
72 % git config user.name "Leon Brocard"
73 % git config user.email acme@astray.com
74
d7dd28b6 75=head1 OVERVIEW OF THE REPOSITORY
76
77Once you have changed into the repository directory, you can inspect it.
78
d7dd28b6 79
39219fd3 80After a clone the repository will contain a single local branch, which
81will be the current branch as well, as indicated by the asterix.
82
83 % git branch
84 * blead
85
d9847473 86Using the -a switch to branch will also show the remote tracking branches in the
39219fd3 87repository:
88
d9847473 89 % git branch -a
09081495 90 * blead
d7dd28b6 91 origin/HEAD
92 origin/blead
93 ...
94
39219fd3 95The branches that begin with "origin" correspond to the "git remote" that
d9847473 96you cloned from (which is named "origin"). Each branch on the remote will
97be exactly tracked by theses branches. You should NEVER do work on these
98remote tracking branches. You only ever do work in a local branch. Local
99branches can be configured to automerge (on pull) from a designated remote
100tracking branch. This is the case with the default branch C<blead> which
101will be configured to merge from the remote tracking branch
102C<origin/blead>.
39219fd3 103
d7dd28b6 104You can see recent commits:
105
c2cf2042 106 % git log
d7dd28b6 107
23f8d33e 108And pull new changes from the repository, and update your local repository
39219fd3 109(must be clean first)
d7dd28b6 110
111 % git pull
09081495 112
39219fd3 113Assuming we are on the branch C<blead> immediately after a pull, this command
114would be more or less equivalent to:
115
116 % git fetch
117 % git merge origin/blead
118
119In fact if you want to update your local repository without touching your working
120directory you do:
121
122 % git fetch
123
d9847473 124And if you want to update your remote-tracking branches for all defined remotes
125simultaneously you can do
39219fd3 126
127 % git remote update
128
129Neither of these last two commands will update your working directory, however
d9847473 130both will update the remote-tracking branches in your repository.
39219fd3 131
09081495 132To switch to another branch:
133
134 % git checkout origin/maint-5.8-dor
135
136To switch back to blead:
137
138 % git checkout blead
c2cf2042 139
39219fd3 140=head2 FINDING OUT YOUR STATUS
141
142The most common git command you will use will probably be
143
144 % git status
145
23f8d33e 146This command will produce as output a description of the current state of the
39219fd3 147repository, including modified files and unignored untracked files, and in addition
23f8d33e 148it will show things like what files have been staged for the next commit,
149and usually some useful information about how to change things. For instance the
39219fd3 150following:
151
152 $ git status
153 # On branch blead
154 # Your branch is ahead of 'origin/blead' by 1 commit.
155 #
156 # Changes to be committed:
157 # (use "git reset HEAD <file>..." to unstage)
158 #
159 # modified: pod/perlrepository.pod
160 #
161 # Changed but not updated:
162 # (use "git add <file>..." to update what will be committed)
163 #
164 # modified: pod/perlrepository.pod
165 #
166 # Untracked files:
167 # (use "git add <file>..." to include in what will be committed)
168 #
169 # deliberate.untracked
170
171This shows that there were changes to this document staged for commit, and
172that there were further changes in the working directory not yet staged. It
173also shows that there was an untracked file in the working directory, and as
174you can see shows how to change all of this. It also shows that there
175is one commit on the working branch C<blead> which has not been pushed to the
23f8d33e 176C<origin> remote yet. B<NOTE>: that this output is also what you see as a
d9847473 177template if you do not provide a message to C<git commit>.
7f6effc7 178
179Assuming we commit all the mentioned changes above:
180
181 % git commit -a -m'explain git status and stuff about remotes'
182 Created commit daf8e63: explain git status and stuff about remotes
183 1 files changed, 83 insertions(+), 3 deletions(-)
184
185We can re-run git status and see something like this:
186
187 % git status
188 # On branch blead
189 # Your branch is ahead of 'origin/blead' by 2 commits.
190 #
191 # Untracked files:
192 # (use "git add <file>..." to include in what will be committed)
193 #
194 # deliberate.untracked
195 nothing added to commit but untracked files present (use "git add" to track)
196
39219fd3 197
23f8d33e 198When in doubt, before you do anything else, check your status and read it
39219fd3 199carefully, many questions are answered directly by the git status output.
200
c2cf2042 201=head1 SUBMITTING A PATCH
202
203If you have a patch in mind for Perl, you should first get a copy of
204the repository:
205
206 % git clone git://perl5.git.perl.org/perl.git perl-git
207
208Then change into the directory:
209
210 % cd perl-git
211
12322d22 212Alternatively, if you already have a Perl repository, you should
f5445761 213ensure that you're on the I<blead> branch, and your repository
12322d22 214is up to date:
215
216 % git checkout blead
217 % git pull
218
219Now that we have everything up to date, we need to create a temporary new
220branch for these changes and switch into it:
b1fccde5 221
a9b05323 222 % git checkout -b orange
23f8d33e 223
a9b05323 224which is the short form of
225
b1fccde5 226 % git branch orange
227 % git checkout orange
228
c2cf2042 229Then make your changes. For example, if Leon Brocard changes his name
230to Orange Brocard, we should change his name in the AUTHORS file:
231
232 % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
233
234You can see what files are changed:
235
236 % git status
237 # On branch blead
238 # Changes to be committed:
239 # (use "git reset HEAD <file>..." to unstage)
240 #
241 # modified: AUTHORS
242 #
243
c2cf2042 244And you can see the changes:
245
246 % git diff
247 diff --git a/AUTHORS b/AUTHORS
248 index 293dd70..722c93e 100644
249 --- a/AUTHORS
250 +++ b/AUTHORS
7df2e4bc 251 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
c2cf2042 252 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
253 Leif Huhn <leif@hale.dkstat.com>
254 Len Johnson <lenjay@ibm.net>
255 -Leon Brocard <acme@astray.com>
256 +Orange Brocard <acme@astray.com>
257 Les Peters <lpeters@aol.net>
258 Lesley Binks <lesley.binks@gmail.com>
259 Lincoln D. Stein <lstein@cshl.org>
260
261Now commit your change locally:
262
263 % git add AUTHORS
264 % git commit -m 'Rename Leon Brocard to Orange Brocard'
265 Created commit 6196c1d: Rename Leon Brocard to Orange Brocard
266 1 files changed, 1 insertions(+), 1 deletions(-)
267
268Now you should create a patch file for all your local changes:
269
2af192ee 270 % git format-patch origin
c2cf2042 271 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
272
273You should now send an email to perl5-porters@perl.org with a
274description of your changes, and attach this patch file as an
275attachment.
276
b1fccde5 277If you want to delete your temporary branch, you may do so with:
278
279 % git checkout blead
280 % git branch -d orange
281 error: The branch 'orange' is not an ancestor of your current HEAD.
282 If you are sure you want to delete it, run 'git branch -D orange'.
283 % git branch -D orange
284 Deleted branch orange.
7df2e4bc 285
286=head1 ACCEPTING A PATCH
287
288If you have received a patch file generated using the above section,
289you should try out the patch.
290
291First we need to create a temporary new branch for these changes and
292switch into it:
293
a9b05323 294 % git checkout -b experimental
7df2e4bc 295
296Now we should apply the patch:
297
2af192ee 298 % git am 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
7df2e4bc 299 Applying Rename Leon Brocard to Orange Brocard
300
301Now we can inspect the change:
302
303 % git log
304 commit b1b3dab48344cff6de4087efca3dbd63548ab5e2
305 Author: Leon Brocard <acme@astray.com>
306 Date: Fri Dec 19 17:02:59 2008 +0000
307
308 Rename Leon Brocard to Orange Brocard
309 ...
310
311 % git diff blead
312 diff --git a/AUTHORS b/AUTHORS
313 index 293dd70..722c93e 100644
314 --- a/AUTHORS
315 +++ b/AUTHORS
316 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
317 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
318 Leif Huhn <leif@hale.dkstat.com>
319 Len Johnson <lenjay@ibm.net>
320 -Leon Brocard <acme@astray.com>
321 +Orange Brocard <acme@astray.com>
322 Les Peters <lpeters@aol.net>
323 Lesley Binks <lesley.binks@gmail.com>
324 Lincoln D. Stein <lstein@cshl.org>
325
326If you are a committer to Perl and you think the patch is good, you can
75fb7651 327then merge it into blead then push it out to the main repository:
7df2e4bc 328
329 % git checkout blead
d9847473 330 % git merge experimental
75fb7651 331 % git push
7df2e4bc 332
333If you want to delete your temporary branch, you may do so with:
334
335 % git checkout blead
336 % git branch -d experimental
337 error: The branch 'experimental' is not an ancestor of your current HEAD.
338 If you are sure you want to delete it, run 'git branch -D experimental'.
339 % git branch -D experimental
340 Deleted branch experimental.