This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Remove an extra space
[perl5.git] / pod / perlrepository.pod
CommitLineData
0549aefb
LB
1=for comment
2Consistent formatting of this file is achieved with:
3 perl ./Porting/podtidy pod/perlrepository.pod
4
d7dd28b6
LB
5=head1 NAME
6
7perlrepository - Using the Perl source repository
8
9=head1 SYNOPSIS
10
dc3c3040 11All of Perl's source code is kept centrally in a Git repository at
c26da522
LB
12I<perl5.git.perl.org>. The repository contains many Perl revisions from
13Perl 1 onwards and all the revisions from Perforce, the version control
14system we were using previously. This repository is accessible in
15different ways.
d7dd28b6
LB
16
17The full repository takes up about 80MB of disk space. A check out of
d9847473
RGS
18the blead branch (that is, the master branch, which contains bleadperl,
19the development version of perl 5) takes up about 160MB of disk space
20(including the repository). A build of bleadperl takes up about 200MB
21(including the repository and the check out).
d7dd28b6
LB
22
23=head1 GETTING ACCESS TO THE REPOSITORY
24
25=head2 READ ACCESS VIA THE WEB
26
dc3c3040
GA
27You may access the repository over the web. This allows you to browse
28the tree, see recent commits, subscribe to RSS feeds for the changes,
29search for particular commits and more. You may access it at:
d7dd28b6
LB
30
31 http://perl5.git.perl.org/perl.git
32
dc3c3040
GA
33A mirror of the repository is found at:
34
35 http://github.com/github/perl
36
d7dd28b6
LB
37=head2 READ ACCESS VIA GIT
38
39You will need a copy of Git for your computer. You can fetch a copy of
40the repository using the Git protocol (which uses port 9418):
41
3b8a5fb0 42 git clone git://perl5.git.perl.org/perl.git perl-git
d7dd28b6 43
f755e97d 44This clones the repository and makes a local copy in the F<perl-git>
d7dd28b6
LB
45directory.
46
47If your local network does not allow you to use port 9418, then you can
572f57ba 48fetch a copy of the repository over HTTP (this is slower):
d7dd28b6 49
3b8a5fb0 50 git clone http://perl5.git.perl.org/perl.git perl-http
d7dd28b6 51
f755e97d 52This clones the repository and makes a local copy in the F<perl-http>
d7dd28b6
LB
53directory.
54
55=head2 WRITE ACCESS TO THE REPOSITORY
56
6acba58e
LB
57If you are a committer, then you can fetch a copy of the repository
58that you can push back on with:
d7dd28b6 59
3b8a5fb0 60 git clone ssh://perl5.git.perl.org/gitroot/perl.git perl-ssh
d7dd28b6 61
8f718e95 62This clones the repository and makes a local copy in the F<perl-ssh>
d7dd28b6
LB
63directory.
64
c26da522
LB
65If you cloned using the git protocol, which is faster than ssh, then
66you will need to modify your config in order to enable pushing. Edit
67F<.git/config> where you will see something like:
1a0f15d5
YO
68
69 [remote "origin"]
70 url = git://perl5.git.perl.org/perl.git
71
72change that to something like this:
73
74 [remote "origin"]
75 url = ssh://perl5.git.perl.org/gitroot/perl.git
76
dc3c3040
GA
77NOTE: there are symlinks set up so that the /gitroot is optional and
78since SSH is the default protocol you can actually shorten the "url" to
79C<perl5.git.perl.org:/perl.git>.
d7dd28b6 80
184487f0
NC
81You can also set up your user name and e-mail address. For example
82
83 % git config user.name "Leon Brocard"
84 % git config user.email acme@astray.com
85
6acba58e
LB
86It is also possible to keep C<origin> as a git remote, and add a new
87remote for ssh access:
f6c12373 88
dc3c3040 89 % git remote add camel perl5.git.perl.org:/perl.git
f6c12373 90
6acba58e 91This allows you to update your local repository by pulling from
f755e97d 92C<origin>, which is faster and doesn't require you to authenticate, and
6acba58e 93to push your changes back with the C<camel> remote:
f6c12373
VP
94
95 % git fetch camel
96 % git push camel
97
6acba58e
LB
98The C<fetch> command just updates the C<camel> refs, as the objects
99themselves should have been fetched when pulling from C<origin>.
f6c12373 100
d7dd28b6
LB
101=head1 OVERVIEW OF THE REPOSITORY
102
6acba58e
LB
103Once you have changed into the repository directory, you can inspect
104it.
d7dd28b6 105
39219fd3 106After a clone the repository will contain a single local branch, which
50eca761 107will be the current branch as well, as indicated by the asterisk.
39219fd3
YO
108
109 % git branch
110 * blead
111
f755e97d 112Using the -a switch to C<branch> will also show the remote tracking
6acba58e 113branches in the repository:
39219fd3 114
d9847473 115 % git branch -a
09081495 116 * blead
d7dd28b6
LB
117 origin/HEAD
118 origin/blead
119 ...
120
6acba58e
LB
121The branches that begin with "origin" correspond to the "git remote"
122that you cloned from (which is named "origin"). Each branch on the
123remote will be exactly tracked by theses branches. You should NEVER do
124work on these remote tracking branches. You only ever do work in a
125local branch. Local branches can be configured to automerge (on pull)
126from a designated remote tracking branch. This is the case with the
127default branch C<blead> which will be configured to merge from the
128remote tracking branch C<origin/blead>.
39219fd3 129
d7dd28b6
LB
130You can see recent commits:
131
c2cf2042 132 % git log
d7dd28b6 133
6acba58e
LB
134And pull new changes from the repository, and update your local
135repository (must be clean first)
d7dd28b6
LB
136
137 % git pull
09081495 138
6acba58e
LB
139Assuming we are on the branch C<blead> immediately after a pull, this
140command would be more or less equivalent to:
39219fd3
YO
141
142 % git fetch
143 % git merge origin/blead
144
6acba58e
LB
145In fact if you want to update your local repository without touching
146your working directory you do:
39219fd3
YO
147
148 % git fetch
149
6acba58e
LB
150And if you want to update your remote-tracking branches for all defined
151remotes simultaneously you can do
39219fd3
YO
152
153 % git remote update
154
6acba58e
LB
155Neither of these last two commands will update your working directory,
156however both will update the remote-tracking branches in your
157repository.
39219fd3 158
09081495
LB
159To switch to another branch:
160
161 % git checkout origin/maint-5.8-dor
162
6051489b
NC
163To make a local branch of a remote branch:
164
165 % git checkout -b maint-5.10 origin/maint-5.10
166
09081495
LB
167To switch back to blead:
168
169 % git checkout blead
c2cf2042 170
39219fd3
YO
171=head2 FINDING OUT YOUR STATUS
172
173The most common git command you will use will probably be
174
175 % git status
176
6acba58e
LB
177This command will produce as output a description of the current state
178of the repository, including modified files and unignored untracked
179files, and in addition it will show things like what files have been
180staged for the next commit, and usually some useful information about
181how to change things. For instance the following:
39219fd3
YO
182
183 $ git status
184 # On branch blead
185 # Your branch is ahead of 'origin/blead' by 1 commit.
186 #
187 # Changes to be committed:
188 # (use "git reset HEAD <file>..." to unstage)
189 #
190 # modified: pod/perlrepository.pod
191 #
192 # Changed but not updated:
193 # (use "git add <file>..." to update what will be committed)
194 #
195 # modified: pod/perlrepository.pod
196 #
197 # Untracked files:
198 # (use "git add <file>..." to include in what will be committed)
199 #
200 # deliberate.untracked
201
6acba58e
LB
202This shows that there were changes to this document staged for commit,
203and that there were further changes in the working directory not yet
204staged. It also shows that there was an untracked file in the working
205directory, and as you can see shows how to change all of this. It also
0549aefb
LB
206shows that there is one commit on the working branch C<blead> which has
207not been pushed to the C<origin> remote yet. B<NOTE>: that this output
208is also what you see as a template if you do not provide a message to
209C<git commit>.
7f6effc7
YO
210
211Assuming we commit all the mentioned changes above:
212
213 % git commit -a -m'explain git status and stuff about remotes'
214 Created commit daf8e63: explain git status and stuff about remotes
215 1 files changed, 83 insertions(+), 3 deletions(-)
216
217We can re-run git status and see something like this:
218
219 % git status
220 # On branch blead
221 # Your branch is ahead of 'origin/blead' by 2 commits.
222 #
223 # Untracked files:
224 # (use "git add <file>..." to include in what will be committed)
225 #
226 # deliberate.untracked
227 nothing added to commit but untracked files present (use "git add" to track)
228
39219fd3 229
6acba58e
LB
230When in doubt, before you do anything else, check your status and read
231it carefully, many questions are answered directly by the git status
232output.
39219fd3 233
c2cf2042
LB
234=head1 SUBMITTING A PATCH
235
236If you have a patch in mind for Perl, you should first get a copy of
237the repository:
238
239 % git clone git://perl5.git.perl.org/perl.git perl-git
240
241Then change into the directory:
242
243 % cd perl-git
244
6acba58e
LB
245Alternatively, if you already have a Perl repository, you should ensure
246that you're on the I<blead> branch, and your repository is up to date:
12322d22
A
247
248 % git checkout blead
249 % git pull
250
0549aefb
LB
251(It's preferable to patch against the latest blead version, since
252patches are usually integrated from blead to the maintenance branches.
253This does not apply, obviously, in the rare case where your patch is
254specific to a maintaince release.)
a44f43ac 255
6acba58e
LB
256Now that we have everything up to date, we need to create a temporary
257new branch for these changes and switch into it:
b1fccde5 258
a9b05323 259 % git checkout -b orange
23f8d33e 260
a9b05323
YO
261which is the short form of
262
b1fccde5
LB
263 % git branch orange
264 % git checkout orange
265
c2cf2042
LB
266Then make your changes. For example, if Leon Brocard changes his name
267to Orange Brocard, we should change his name in the AUTHORS file:
268
269 % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
270
271You can see what files are changed:
272
273 % git status
f755e97d 274 # On branch orange
c2cf2042
LB
275 # Changes to be committed:
276 # (use "git reset HEAD <file>..." to unstage)
277 #
278 # modified: AUTHORS
279 #
280
c2cf2042
LB
281And you can see the changes:
282
283 % git diff
284 diff --git a/AUTHORS b/AUTHORS
285 index 293dd70..722c93e 100644
286 --- a/AUTHORS
287 +++ b/AUTHORS
7df2e4bc 288 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
c2cf2042
LB
289 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
290 Leif Huhn <leif@hale.dkstat.com>
291 Len Johnson <lenjay@ibm.net>
292 -Leon Brocard <acme@astray.com>
293 +Orange Brocard <acme@astray.com>
294 Les Peters <lpeters@aol.net>
295 Lesley Binks <lesley.binks@gmail.com>
296 Lincoln D. Stein <lstein@cshl.org>
297
298Now commit your change locally:
299
dc3c3040 300 % git commit -a -m 'Rename Leon Brocard to Orange Brocard'
c2cf2042
LB
301 Created commit 6196c1d: Rename Leon Brocard to Orange Brocard
302 1 files changed, 1 insertions(+), 1 deletions(-)
303
dc3c3040
GA
304You can examine your last commit with:
305
306 % git show HEAD
307
308and if you are not happy with either the description or the patch
c26da522 309itself you can fix it up by editing the files once more and then issue:
dc3c3040
GA
310
311 % git commit -a --amend
312
c2cf2042
LB
313Now you should create a patch file for all your local changes:
314
2af192ee 315 % git format-patch origin
c2cf2042
LB
316 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
317
318You should now send an email to perl5-porters@perl.org with a
dc3c3040 319description of your changes, and include this patch file as an
c2cf2042
LB
320attachment.
321
b1fccde5
LB
322If you want to delete your temporary branch, you may do so with:
323
324 % git checkout blead
325 % git branch -d orange
326 error: The branch 'orange' is not an ancestor of your current HEAD.
327 If you are sure you want to delete it, run 'git branch -D orange'.
328 % git branch -D orange
329 Deleted branch orange.
7df2e4bc 330
a44f43ac
RGS
331=head2 A note on derived files
332
333Be aware that many files in the distribution are derivative--avoid
0549aefb
LB
334patching them, because git won't see the changes to them, and the build
335process will overwrite them. Patch the originals instead. Most
336utilities (like perldoc) are in this category, i.e. patch
337utils/perldoc.PL rather than utils/perldoc. Similarly, don't create
338patches for files under $src_root/ext from their copies found in
339$install_root/lib. If you are unsure about the proper location of a
340file that may have gotten copied while building the source
341distribution, consult the C<MANIFEST>.
a44f43ac
RGS
342
343=head2 A note on binary files
344
0549aefb
LB
345Since the patch(1) utility cannot deal with binary files, it's
346important that you either avoid the use of binary files in your patch,
347generate the files dynamically, or that you encode any binary files
348using the F<uupacktool.pl> utility.
a44f43ac
RGS
349
350Assuming you needed to include a gzip-encoded file for a module's test
351suite, you might do this as follows using the F<uupacktool.pl> utility:
352
353 $ perl uupacktool.pl -v -p -D lib/Some/Module/t/src/t.gz
354 Writing lib/Some/Module/t/src/t.gz into lib/Some/Module/t/src/t.gz.packed
355
356This will replace the C<t.gz> file with an encoded counterpart. During
0549aefb
LB
357C<make test>, before any tests are run, perl's Makefile will restore
358all the C<.packed> files mentioned in the MANIFEST to their original
359name. This means that the test suite does not need to be aware of this
360packing scheme and will not need to be altered.
a44f43ac
RGS
361
362=head2 Getting your patch accepted
363
0549aefb
LB
364The first thing you should include with your patch is a description of
365the problem that the patch corrects. If it is a code patch (rather
366than a documentation patch) you should also include a small test case
367that illustrates the bug (a patch to an existing test file is
368preferred).
a44f43ac
RGS
369
370If you are submitting a code patch there are several other things that
371you need to do.
372
373=over 4
374
375=item Comments, Comments, Comments
376
0549aefb
LB
377Be sure to adequately comment your code. While commenting every line
378is unnecessary, anything that takes advantage of side effects of
a44f43ac 379operators, that creates changes that will be felt outside of the
0549aefb
LB
380function being patched, or that others may find confusing should be
381documented. If you are going to err, it is better to err on the side
382of adding too many comments than too few.
a44f43ac
RGS
383
384=item Style
385
0549aefb
LB
386In general, please follow the particular style of the code you are
387patching.
a44f43ac 388
0549aefb
LB
389In particular, follow these general guidelines for patching Perl
390sources:
a44f43ac
RGS
391
392 8-wide tabs (no exceptions!)
393 4-wide indents for code, 2-wide indents for nested CPP #defines
394 try hard not to exceed 79-columns
395 ANSI C prototypes
396 uncuddled elses and "K&R" style for indenting control constructs
397 no C++ style (//) comments
398 mark places that need to be revisited with XXX (and revisit often!)
399 opening brace lines up with "if" when conditional spans multiple
400 lines; should be at end-of-line otherwise
401 in function definitions, name starts in column 0 (return value is on
402 previous line)
403 single space after keywords that are followed by parens, no space
404 between function name and following paren
405 avoid assignments in conditionals, but if they're unavoidable, use
406 extra paren, e.g. "if (a && (b = c)) ..."
407 "return foo;" rather than "return(foo);"
408 "if (!foo) ..." rather than "if (foo == FALSE) ..." etc.
409
410=item Testsuite
411
0549aefb
LB
412When submitting a patch you should make every effort to also include an
413addition to perl's regression tests to properly exercise your patch.
414Your testsuite additions should generally follow these guidelines
415(courtesy of Gurusamy Sarathy <gsar@activestate.com>):
a44f43ac
RGS
416
417 Know what you're testing. Read the docs, and the source.
418 Tend to fail, not succeed.
419 Interpret results strictly.
420 Use unrelated features (this will flush out bizarre interactions).
421 Use non-standard idioms (otherwise you are not testing TIMTOWTDI).
422 Avoid using hardcoded test numbers whenever possible (the
423 EXPECTED/GOT found in t/op/tie.t is much more maintainable,
424 and gives better failure reports).
425 Give meaningful error messages when a test fails.
426 Avoid using qx// and system() unless you are testing for them. If you
427 do use them, make sure that you cover _all_ perl platforms.
428 Unlink any temporary files you create.
429 Promote unforeseen warnings to errors with $SIG{__WARN__}.
430 Be sure to use the libraries and modules shipped with the version
431 being tested, not those that were already installed.
432 Add comments to the code explaining what you are testing for.
433 Make updating the '1..42' string unnecessary. Or make sure that
434 you update it.
435 Test _all_ behaviors of a given operator, library, or function:
436 - All optional arguments
437 - Return values in various contexts (boolean, scalar, list, lvalue)
438 - Use both global and lexical variables
439 - Don't forget the exceptional, pathological cases.
440
441=back
442
7df2e4bc
LB
443=head1 ACCEPTING A PATCH
444
445If you have received a patch file generated using the above section,
446you should try out the patch.
447
448First we need to create a temporary new branch for these changes and
449switch into it:
450
a9b05323 451 % git checkout -b experimental
7df2e4bc 452
6acba58e
LB
453Patches that were formatted by C<git format-patch> are applied with
454C<git am>:
7df2e4bc 455
2af192ee 456 % git am 0001-Rename-Leon-Brocard-to-Orange-Brocard.patch
7df2e4bc
LB
457 Applying Rename Leon Brocard to Orange Brocard
458
6acba58e
LB
459If just a raw diff is provided, it is also possible use this two-step
460process:
09645c26
VP
461
462 % git apply bugfix.diff
dc3c3040 463 % git commit -a -m "Some fixing" --author="That Guy <that.guy@internets.com>"
09645c26 464
7df2e4bc
LB
465Now we can inspect the change:
466
dc3c3040 467 % git show HEAD
7df2e4bc
LB
468 commit b1b3dab48344cff6de4087efca3dbd63548ab5e2
469 Author: Leon Brocard <acme@astray.com>
470 Date: Fri Dec 19 17:02:59 2008 +0000
471
472 Rename Leon Brocard to Orange Brocard
7df2e4bc 473
7df2e4bc
LB
474 diff --git a/AUTHORS b/AUTHORS
475 index 293dd70..722c93e 100644
476 --- a/AUTHORS
477 +++ b/AUTHORS
478 @@ -541,7 +541,7 @@ Lars Hecking <lhecking@nmrc.ucc.ie>
479 Laszlo Molnar <laszlo.molnar@eth.ericsson.se>
480 Leif Huhn <leif@hale.dkstat.com>
481 Len Johnson <lenjay@ibm.net>
482 -Leon Brocard <acme@astray.com>
483 +Orange Brocard <acme@astray.com>
484 Les Peters <lpeters@aol.net>
485 Lesley Binks <lesley.binks@gmail.com>
486 Lincoln D. Stein <lstein@cshl.org>
487
488If you are a committer to Perl and you think the patch is good, you can
75fb7651 489then merge it into blead then push it out to the main repository:
7df2e4bc
LB
490
491 % git checkout blead
d9847473 492 % git merge experimental
75fb7651 493 % git push
7df2e4bc
LB
494
495If you want to delete your temporary branch, you may do so with:
496
497 % git checkout blead
498 % git branch -d experimental
499 error: The branch 'experimental' is not an ancestor of your current HEAD.
500 If you are sure you want to delete it, run 'git branch -D experimental'.
501 % git branch -D experimental
502 Deleted branch experimental.
b0d36535
YO
503
504=head1 CLEANING A WORKING DIRECTORY
505
6acba58e 506The command C<git clean> can with varying arguments be used as a
dc3c3040 507replacement for C<make clean>.
b0d36535
YO
508
509To reset your working directory to a pristine condition you can do:
510
511 git clean -dxf
512
513However, be aware this will delete ALL untracked content. You can use
514
515 git clean -Xf
516
6acba58e
LB
517to remove all ignored untracked files, such as build and test
518byproduct, but leave any manually created files alone.
b0d36535 519
0549aefb 520If you only want to cancel some uncommitted edits, you can use C<git
c26da522
LB
521checkout> and give it a list of files to be reverted, or C<git checkout
522-f> to revert them all.
f755e97d
RGS
523
524If you want to cancel one or several commits, you can use C<git reset>.
525
d82a90c1
VP
526=head1 BISECTING
527
6acba58e
LB
528C<git> provides a built-in way to determine, with a binary search in
529the history, which commit should be blamed for introducing a given bug.
d82a90c1 530
6acba58e
LB
531Suppose that we have a script F<~/testcase.pl> that exits with C<0>
532when some behaviour is correct, and with C<1> when it's faulty. We need
533an helper script that automates building C<perl> and running the
534testcase:
d82a90c1
VP
535
536 % cat ~/run
537 #!/bin/sh
538 git clean -dxf
539 # If you can use ccache, add -Dcc=ccache\ gcc -Dld=gcc to the Configure line
540 sh Configure -des -Dusedevel -Doptimize="-g" || exit 125
541 make || exit 125
542 ./perl -Ilib ~/testcase.pl
543
6acba58e
LB
544This script may return C<125> to indicate that the corresponding commit
545should be skipped. Otherwise, it returns the status of
546F<~/testcase.pl>.
d82a90c1
VP
547
548We first enter in bisect mode with:
549
550 % git bisect start
551
6acba58e
LB
552For example, if the bug is present on C<HEAD> but wasn't in 5.10.0,
553C<git> will learn about this when you enter:
d82a90c1
VP
554
555 % git bisect bad
556 % git bisect good perl-5.10.0
557 Bisecting: 853 revisions left to test after this
558
6acba58e
LB
559This results in checking out the median commit between C<HEAD> and
560C<perl-5.10.0>. We can then run the bisecting process with:
d82a90c1
VP
561
562 % git bisect run ~/run
563
564When the first bad commit is isolated, C<git bisect> will tell you so:
565
566 ca4cfd28534303b82a216cfe83a1c80cbc3b9dc5 is first bad commit
567 commit ca4cfd28534303b82a216cfe83a1c80cbc3b9dc5
568 Author: Dave Mitchell <davem@fdisolutions.com>
569 Date: Sat Feb 9 14:56:23 2008 +0000
570
9469eb4a 571 [perl #49472] Attributes + Unknown Error
d82a90c1
VP
572 ...
573
574 bisect run success
575
6acba58e
LB
576You can peek into the bisecting process with C<git bisect log> and
577C<git bisect visualize>. C<git bisect reset> will get you out of bisect
578mode.
d82a90c1 579
6acba58e
LB
580Please note that the first C<good> state must be an ancestor of the
581first C<bad> state. If you want to search for the commit that I<solved>
582some bug, you have to negate your test case (i.e. exit with C<1> if OK
583and C<0> if not) and still mark the lower bound as C<good> and the
584upper as C<bad>. The "first bad commit" has then to be understood as
585the "first commit where the bug is solved".
d82a90c1 586
6acba58e
LB
587C<git help bisect> has much more information on how you can tweak your
588binary searches.
9d68b7ed 589
03050721
LB
590=head1 SUBMITTING A PATCH VIA GITHUB
591
592GitHub is a website that makes it easy to fork and publish projects
593with Git. First you should set up a GitHub account and log in.
594
595Perl's git repository is mirrored on GitHub at this page:
596
597 http://github.com/github/perl/tree/blead
598
599Visit the page and click the "fork" button. This clones the Perl git
600repository for you and provides you with "Your Clone URL" from which
601you should clone:
602
603 % git clone git@github.com:USERNAME/perl.git perl-github
604
605We shall make the same patch as above, creating a new branch:
606
607 % cd perl-github
608 % git remote add upstream git://github.com/github/perl.git
609 % git pull upstream blead
610 % git checkout -b orange
611 % perl -pi -e 's{Leon Brocard}{Orange Brocard}' AUTHORS
dc3c3040 612 % git commit -a -m 'Rename Leon Brocard to Orange Brocard'
03050721
LB
613 % git push origin orange
614
615The orange branch has been pushed to GitHub, so you should now send an
616email to perl5-porters@perl.org with a description of your changes and
617the following information:
618
619 http://github.com/USERNAME/perl/tree/orange
620 git@github.com:USERNAME/perl.git branch orange
621
c26da522
LB
622=head1 MERGING FROM A BRANCH VIA GITHUB
623
624If someone has provided a branch via GitHub and you are a committer,
5c9c28c6 625you should use the following in your perl-ssh directory:
c26da522
LB
626
627 % git remote add dandv git://github.com/dandv/perl.git
628 % git fetch
629
630Now you can see the differences between the branch and blead:
631
632 % git diff dandv/blead
633
634And you can see the commits:
635
636 % git log dandv/blead
637
638If you approve of a specific commit, you can cherry pick it:
639
640 % git cherry-pick -x 3adac458cb1c1d41af47fc66e67b49c8dec2323f
641
642And then push back to the repository:
643
644 % git push
645
9469eb4a 646=head1 COMMITTING TO MAINTENANCE VERSIONS
9d68b7ed
LB
647
648To commit to a maintenance version of perl, you need to create a local
649tracking branch:
650
651 % git checkout --track -b maint-5.005 origin/maint-5.005
652
0549aefb
LB
653This creates a local branch named C<maint-5.005>, which tracks the
654remote branch C<origin/maint-5.005>. Then you can pull, commit, merge
655and push as before.
b0d36535 656
f755e97d 657You can also cherry-pick commits from blead and another branch, by
0549aefb
LB
658using the C<git cherry-pick> command. It is recommended to use the
659B<-x> option to C<git cherry-pick> in order to record the SHA1 of the
660original commit in the new commit message.
f755e97d
RGS
661
662=head1 SEE ALSO
663
664The git documentation, accessible via C<git help command>.
0549aefb 665