OLD | NEW |
| (Empty) |
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" | |
2 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> | |
3 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> | |
4 <head> | |
5 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" /
> | |
6 <meta name="generator" content="AsciiDoc 8.6.9" /> | |
7 <title>depot_tools_tutorial(7)</title> | |
8 <style type="text/css"> | |
9 /* Shared CSS for AsciiDoc xhtml11 and html5 backends */ | |
10 | |
11 /* Default font. */ | |
12 body { | |
13 font-family: Georgia,serif; | |
14 } | |
15 | |
16 /* Title font. */ | |
17 h1, h2, h3, h4, h5, h6, | |
18 div.title, caption.title, | |
19 thead, p.table.header, | |
20 #toctitle, | |
21 #author, #revnumber, #revdate, #revremark, | |
22 #footer { | |
23 font-family: Arial,Helvetica,sans-serif; | |
24 } | |
25 | |
26 body { | |
27 margin: 1em 5% 1em 5%; | |
28 } | |
29 | |
30 a { | |
31 color: blue; | |
32 text-decoration: underline; | |
33 } | |
34 a:visited { | |
35 color: fuchsia; | |
36 } | |
37 | |
38 em { | |
39 font-style: italic; | |
40 color: navy; | |
41 } | |
42 | |
43 strong { | |
44 font-weight: bold; | |
45 color: #083194; | |
46 } | |
47 | |
48 h1, h2, h3, h4, h5, h6 { | |
49 color: #527bbd; | |
50 margin-top: 1.2em; | |
51 margin-bottom: 0.5em; | |
52 line-height: 1.3; | |
53 } | |
54 | |
55 h1, h2, h3 { | |
56 border-bottom: 2px solid silver; | |
57 } | |
58 h2 { | |
59 padding-top: 0.5em; | |
60 } | |
61 h3 { | |
62 float: left; | |
63 } | |
64 h3 + * { | |
65 clear: left; | |
66 } | |
67 h5 { | |
68 font-size: 1.0em; | |
69 } | |
70 | |
71 div.sectionbody { | |
72 margin-left: 0; | |
73 } | |
74 | |
75 hr { | |
76 border: 1px solid silver; | |
77 } | |
78 | |
79 p { | |
80 margin-top: 0.5em; | |
81 margin-bottom: 0.5em; | |
82 } | |
83 | |
84 ul, ol, li > p { | |
85 margin-top: 0; | |
86 } | |
87 ul > li { color: #aaa; } | |
88 ul > li > * { color: black; } | |
89 | |
90 .monospaced, code, pre { | |
91 font-family: "Courier New", Courier, monospace; | |
92 font-size: inherit; | |
93 color: navy; | |
94 padding: 0; | |
95 margin: 0; | |
96 } | |
97 pre { | |
98 white-space: pre-wrap; | |
99 } | |
100 | |
101 #author { | |
102 color: #527bbd; | |
103 font-weight: bold; | |
104 font-size: 1.1em; | |
105 } | |
106 #email { | |
107 } | |
108 #revnumber, #revdate, #revremark { | |
109 } | |
110 | |
111 #footer { | |
112 font-size: small; | |
113 border-top: 2px solid silver; | |
114 padding-top: 0.5em; | |
115 margin-top: 4.0em; | |
116 } | |
117 #footer-text { | |
118 float: left; | |
119 padding-bottom: 0.5em; | |
120 } | |
121 #footer-badges { | |
122 float: right; | |
123 padding-bottom: 0.5em; | |
124 } | |
125 | |
126 #preamble { | |
127 margin-top: 1.5em; | |
128 margin-bottom: 1.5em; | |
129 } | |
130 div.imageblock, div.exampleblock, div.verseblock, | |
131 div.quoteblock, div.literalblock, div.listingblock, div.sidebarblock, | |
132 div.admonitionblock { | |
133 margin-top: 1.0em; | |
134 margin-bottom: 1.5em; | |
135 } | |
136 div.admonitionblock { | |
137 margin-top: 2.0em; | |
138 margin-bottom: 2.0em; | |
139 margin-right: 10%; | |
140 color: #606060; | |
141 } | |
142 | |
143 div.content { /* Block element content. */ | |
144 padding: 0; | |
145 } | |
146 | |
147 /* Block element titles. */ | |
148 div.title, caption.title { | |
149 color: #527bbd; | |
150 font-weight: bold; | |
151 text-align: left; | |
152 margin-top: 1.0em; | |
153 margin-bottom: 0.5em; | |
154 } | |
155 div.title + * { | |
156 margin-top: 0; | |
157 } | |
158 | |
159 td div.title:first-child { | |
160 margin-top: 0.0em; | |
161 } | |
162 div.content div.title:first-child { | |
163 margin-top: 0.0em; | |
164 } | |
165 div.content + div.title { | |
166 margin-top: 0.0em; | |
167 } | |
168 | |
169 div.sidebarblock > div.content { | |
170 background: #ffffee; | |
171 border: 1px solid #dddddd; | |
172 border-left: 4px solid #f0f0f0; | |
173 padding: 0.5em; | |
174 } | |
175 | |
176 div.listingblock > div.content { | |
177 border: 1px solid #dddddd; | |
178 border-left: 5px solid #f0f0f0; | |
179 background: #f8f8f8; | |
180 padding: 0.5em; | |
181 } | |
182 | |
183 div.quoteblock, div.verseblock { | |
184 padding-left: 1.0em; | |
185 margin-left: 1.0em; | |
186 margin-right: 10%; | |
187 border-left: 5px solid #f0f0f0; | |
188 color: #888; | |
189 } | |
190 | |
191 div.quoteblock > div.attribution { | |
192 padding-top: 0.5em; | |
193 text-align: right; | |
194 } | |
195 | |
196 div.verseblock > pre.content { | |
197 font-family: inherit; | |
198 font-size: inherit; | |
199 } | |
200 div.verseblock > div.attribution { | |
201 padding-top: 0.75em; | |
202 text-align: left; | |
203 } | |
204 /* DEPRECATED: Pre version 8.2.7 verse style literal block. */ | |
205 div.verseblock + div.attribution { | |
206 text-align: left; | |
207 } | |
208 | |
209 div.admonitionblock .icon { | |
210 vertical-align: top; | |
211 font-size: 1.1em; | |
212 font-weight: bold; | |
213 text-decoration: underline; | |
214 color: #527bbd; | |
215 padding-right: 0.5em; | |
216 } | |
217 div.admonitionblock td.content { | |
218 padding-left: 0.5em; | |
219 border-left: 3px solid #dddddd; | |
220 } | |
221 | |
222 div.exampleblock > div.content { | |
223 border-left: 3px solid #dddddd; | |
224 padding-left: 0.5em; | |
225 } | |
226 | |
227 div.imageblock div.content { padding-left: 0; } | |
228 span.image img { border-style: none; vertical-align: text-bottom; } | |
229 a.image:visited { color: white; } | |
230 | |
231 dl { | |
232 margin-top: 0.8em; | |
233 margin-bottom: 0.8em; | |
234 } | |
235 dt { | |
236 margin-top: 0.5em; | |
237 margin-bottom: 0; | |
238 font-style: normal; | |
239 color: navy; | |
240 } | |
241 dd > *:first-child { | |
242 margin-top: 0.1em; | |
243 } | |
244 | |
245 ul, ol { | |
246 list-style-position: outside; | |
247 } | |
248 ol.arabic { | |
249 list-style-type: decimal; | |
250 } | |
251 ol.loweralpha { | |
252 list-style-type: lower-alpha; | |
253 } | |
254 ol.upperalpha { | |
255 list-style-type: upper-alpha; | |
256 } | |
257 ol.lowerroman { | |
258 list-style-type: lower-roman; | |
259 } | |
260 ol.upperroman { | |
261 list-style-type: upper-roman; | |
262 } | |
263 | |
264 div.compact ul, div.compact ol, | |
265 div.compact p, div.compact p, | |
266 div.compact div, div.compact div { | |
267 margin-top: 0.1em; | |
268 margin-bottom: 0.1em; | |
269 } | |
270 | |
271 tfoot { | |
272 font-weight: bold; | |
273 } | |
274 td > div.verse { | |
275 white-space: pre; | |
276 } | |
277 | |
278 div.hdlist { | |
279 margin-top: 0.8em; | |
280 margin-bottom: 0.8em; | |
281 } | |
282 div.hdlist tr { | |
283 padding-bottom: 15px; | |
284 } | |
285 dt.hdlist1.strong, td.hdlist1.strong { | |
286 font-weight: bold; | |
287 } | |
288 td.hdlist1 { | |
289 vertical-align: top; | |
290 font-style: normal; | |
291 padding-right: 0.8em; | |
292 color: navy; | |
293 } | |
294 td.hdlist2 { | |
295 vertical-align: top; | |
296 } | |
297 div.hdlist.compact tr { | |
298 margin: 0; | |
299 padding-bottom: 0; | |
300 } | |
301 | |
302 .comment { | |
303 background: yellow; | |
304 } | |
305 | |
306 .footnote, .footnoteref { | |
307 font-size: 0.8em; | |
308 } | |
309 | |
310 span.footnote, span.footnoteref { | |
311 vertical-align: super; | |
312 } | |
313 | |
314 #footnotes { | |
315 margin: 20px 0 20px 0; | |
316 padding: 7px 0 0 0; | |
317 } | |
318 | |
319 #footnotes div.footnote { | |
320 margin: 0 0 5px 0; | |
321 } | |
322 | |
323 #footnotes hr { | |
324 border: none; | |
325 border-top: 1px solid silver; | |
326 height: 1px; | |
327 text-align: left; | |
328 margin-left: 0; | |
329 width: 20%; | |
330 min-width: 100px; | |
331 } | |
332 | |
333 div.colist td { | |
334 padding-right: 0.5em; | |
335 padding-bottom: 0.3em; | |
336 vertical-align: top; | |
337 } | |
338 div.colist td img { | |
339 margin-top: 0.3em; | |
340 } | |
341 | |
342 @media print { | |
343 #footer-badges { display: none; } | |
344 } | |
345 | |
346 #toc { | |
347 margin-bottom: 2.5em; | |
348 } | |
349 | |
350 #toctitle { | |
351 color: #527bbd; | |
352 font-size: 1.1em; | |
353 font-weight: bold; | |
354 margin-top: 1.0em; | |
355 margin-bottom: 0.1em; | |
356 } | |
357 | |
358 div.toclevel0, div.toclevel1, div.toclevel2, div.toclevel3, div.toclevel4 { | |
359 margin-top: 0; | |
360 margin-bottom: 0; | |
361 } | |
362 div.toclevel2 { | |
363 margin-left: 2em; | |
364 font-size: 0.9em; | |
365 } | |
366 div.toclevel3 { | |
367 margin-left: 4em; | |
368 font-size: 0.9em; | |
369 } | |
370 div.toclevel4 { | |
371 margin-left: 6em; | |
372 font-size: 0.9em; | |
373 } | |
374 | |
375 span.aqua { color: aqua; } | |
376 span.black { color: black; } | |
377 span.blue { color: blue; } | |
378 span.fuchsia { color: fuchsia; } | |
379 span.gray { color: gray; } | |
380 span.green { color: green; } | |
381 span.lime { color: lime; } | |
382 span.maroon { color: maroon; } | |
383 span.navy { color: navy; } | |
384 span.olive { color: olive; } | |
385 span.purple { color: purple; } | |
386 span.red { color: red; } | |
387 span.silver { color: silver; } | |
388 span.teal { color: teal; } | |
389 span.white { color: white; } | |
390 span.yellow { color: yellow; } | |
391 | |
392 span.aqua-background { background: aqua; } | |
393 span.black-background { background: black; } | |
394 span.blue-background { background: blue; } | |
395 span.fuchsia-background { background: fuchsia; } | |
396 span.gray-background { background: gray; } | |
397 span.green-background { background: green; } | |
398 span.lime-background { background: lime; } | |
399 span.maroon-background { background: maroon; } | |
400 span.navy-background { background: navy; } | |
401 span.olive-background { background: olive; } | |
402 span.purple-background { background: purple; } | |
403 span.red-background { background: red; } | |
404 span.silver-background { background: silver; } | |
405 span.teal-background { background: teal; } | |
406 span.white-background { background: white; } | |
407 span.yellow-background { background: yellow; } | |
408 | |
409 span.big { font-size: 2em; } | |
410 span.small { font-size: 0.6em; } | |
411 | |
412 span.underline { text-decoration: underline; } | |
413 span.overline { text-decoration: overline; } | |
414 span.line-through { text-decoration: line-through; } | |
415 | |
416 div.unbreakable { page-break-inside: avoid; } | |
417 | |
418 | |
419 /* | |
420 * xhtml11 specific | |
421 * | |
422 * */ | |
423 | |
424 div.tableblock { | |
425 margin-top: 1.0em; | |
426 margin-bottom: 1.5em; | |
427 } | |
428 div.tableblock > table { | |
429 border: 3px solid #527bbd; | |
430 } | |
431 thead, p.table.header { | |
432 font-weight: bold; | |
433 color: #527bbd; | |
434 } | |
435 p.table { | |
436 margin-top: 0; | |
437 } | |
438 /* Because the table frame attribute is overriden by CSS in most browsers. */ | |
439 div.tableblock > table[frame="void"] { | |
440 border-style: none; | |
441 } | |
442 div.tableblock > table[frame="hsides"] { | |
443 border-left-style: none; | |
444 border-right-style: none; | |
445 } | |
446 div.tableblock > table[frame="vsides"] { | |
447 border-top-style: none; | |
448 border-bottom-style: none; | |
449 } | |
450 | |
451 | |
452 /* | |
453 * html5 specific | |
454 * | |
455 * */ | |
456 | |
457 table.tableblock { | |
458 margin-top: 1.0em; | |
459 margin-bottom: 1.5em; | |
460 } | |
461 thead, p.tableblock.header { | |
462 font-weight: bold; | |
463 color: #527bbd; | |
464 } | |
465 p.tableblock { | |
466 margin-top: 0; | |
467 } | |
468 table.tableblock { | |
469 border-width: 3px; | |
470 border-spacing: 0px; | |
471 border-style: solid; | |
472 border-color: #527bbd; | |
473 border-collapse: collapse; | |
474 } | |
475 th.tableblock, td.tableblock { | |
476 border-width: 1px; | |
477 padding: 4px; | |
478 border-style: solid; | |
479 border-color: #527bbd; | |
480 } | |
481 | |
482 table.tableblock.frame-topbot { | |
483 border-left-style: hidden; | |
484 border-right-style: hidden; | |
485 } | |
486 table.tableblock.frame-sides { | |
487 border-top-style: hidden; | |
488 border-bottom-style: hidden; | |
489 } | |
490 table.tableblock.frame-none { | |
491 border-style: hidden; | |
492 } | |
493 | |
494 th.tableblock.halign-left, td.tableblock.halign-left { | |
495 text-align: left; | |
496 } | |
497 th.tableblock.halign-center, td.tableblock.halign-center { | |
498 text-align: center; | |
499 } | |
500 th.tableblock.halign-right, td.tableblock.halign-right { | |
501 text-align: right; | |
502 } | |
503 | |
504 th.tableblock.valign-top, td.tableblock.valign-top { | |
505 vertical-align: top; | |
506 } | |
507 th.tableblock.valign-middle, td.tableblock.valign-middle { | |
508 vertical-align: middle; | |
509 } | |
510 th.tableblock.valign-bottom, td.tableblock.valign-bottom { | |
511 vertical-align: bottom; | |
512 } | |
513 | |
514 | |
515 /* | |
516 * manpage specific | |
517 * | |
518 * */ | |
519 | |
520 body.manpage h1 { | |
521 padding-top: 0.5em; | |
522 padding-bottom: 0.5em; | |
523 border-top: 2px solid silver; | |
524 border-bottom: 2px solid silver; | |
525 } | |
526 body.manpage h2 { | |
527 border-style: none; | |
528 } | |
529 body.manpage div.sectionbody { | |
530 margin-left: 3em; | |
531 } | |
532 | |
533 @media print { | |
534 body.manpage div#toc { display: none; } | |
535 } | |
536 | |
537 | |
538 div.listingblock > div.content { | |
539 background: rgb(28, 28, 28); | |
540 } | |
541 | |
542 div.listingblock > div > pre > code { | |
543 color: rgb(187, 187, 187); | |
544 } | |
545 </style> | |
546 <script type="text/javascript"> | |
547 /*<+'])'); | |
590 // Function that scans the DOM tree for header elements (the DOM2 | |
591 // nodeIterator API would be a better technique but not supported by all | |
592 // browsers). | |
593 var iterate = function (el) { | |
594 for (var i = el.firstChild; i != null; i = i.nextSibling) { | |
595 if (i.nodeType == 1 /* Node.ELEMENT_NODE */) { | |
596 var mo = re.exec(i.tagName); | |
597 if (mo && (i.getAttribute("class") || i.getAttribute("className")) !=
"float") { | |
598 result[result.length] = new TocEntry(i, getText(i), mo[1]-1); | |
599 } | |
600 iterate(i); | |
601 } | |
602 } | |
603 } | |
604 iterate(el); | |
605 return result; | |
606 } | |
607 | |
608 var toc = document.getElementById("toc"); | |
609 if (!toc) { | |
610 return; | |
611 } | |
612 | |
613 // Delete existing TOC entries in case we're reloading the TOC. | |
614 var tocEntriesToRemove = []; | |
615 var i; | |
616 for (i = 0; i < toc.childNodes.length; i++) { | |
617 var entry = toc.childNodes[i]; | |
618 if (entry.nodeName.toLowerCase() == 'div' | |
619 && entry.getAttribute("class") | |
620 && entry.getAttribute("class").match(/^toclevel/)) | |
621 tocEntriesToRemove.push(entry); | |
622 } | |
623 for (i = 0; i < tocEntriesToRemove.length; i++) { | |
624 toc.removeChild(tocEntriesToRemove[i]); | |
625 } | |
626 | |
627 // Rebuild TOC entries. | |
628 var entries = tocEntries(document.getElementById("content"), toclevels); | |
629 for (var i = 0; i < entries.length; ++i) { | |
630 var entry = entries[i]; | |
631 if (entry.element.id == "") | |
632 entry.element.id = "_toc_" + i; | |
633 var a = document.createElement("a"); | |
634 a.href = "#" + entry.element.id; | |
635 a.appendChild(document.createTextNode(entry.text)); | |
636 var div = document.createElement("div"); | |
637 div.appendChild(a); | |
638 div.className = "toclevel" + entry.toclevel; | |
639 toc.appendChild(div); | |
640 } | |
641 if (entries.length == 0) | |
642 toc.parentNode.removeChild(toc); | |
643 }, | |
644 | |
645 | |
646 ///////////////////////////////////////////////////////////////////// | |
647 // Footnotes generator | |
648 ///////////////////////////////////////////////////////////////////// | |
649 | |
650 /* Based on footnote generation code from: | |
651 * http://www.brandspankingnew.net/archive/2005/07/format_footnote.html | |
652 */ | |
653 | |
654 footnotes: function () { | |
655 // Delete existing footnote entries in case we're reloading the footnodes. | |
656 var i; | |
657 var noteholder = document.getElementById("footnotes"); | |
658 if (!noteholder) { | |
659 return; | |
660 } | |
661 var entriesToRemove = []; | |
662 for (i = 0; i < noteholder.childNodes.length; i++) { | |
663 var entry = noteholder.childNodes[i]; | |
664 if (entry.nodeName.toLowerCase() == 'div' && entry.getAttribute("class") ==
"footnote") | |
665 entriesToRemove.push(entry); | |
666 } | |
667 for (i = 0; i < entriesToRemove.length; i++) { | |
668 noteholder.removeChild(entriesToRemove[i]); | |
669 } | |
670 | |
671 // Rebuild footnote entries. | |
672 var cont = document.getElementById("content"); | |
673 var spans = cont.getElementsByTagName("span"); | |
674 var refs = {}; | |
675 var n = 0; | |
676 for (i=0; i<spans.length; i++) { | |
677 if (spans[i].className == "footnote") { | |
678 n++; | |
679 var note = spans[i].getAttribute("data-note"); | |
680 if (!note) { | |
681 // Use [\s\S] in place of . so multi-line matches work. | |
682 // Because JavaScript has no s (dotall) regex flag. | |
683 note = spans[i].innerHTML.match(/\s*\[([\s\S]*)]\s*/)[1]; | |
684 spans[i].innerHTML = | |
685 "[<a id='_footnoteref_" + n + "' href='#_footnote_" + n + | |
686 "' title='View footnote' class='footnote'>" + n + "</a>]"; | |
687 spans[i].setAttribute("data-note", note); | |
688 } | |
689 noteholder.innerHTML += | |
690 "<div class='footnote' id='_footnote_" + n + "'>" + | |
691 "<a href='#_footnoteref_" + n + "' title='Return to text'>" + | |
692 n + "</a>. " + note + "</div>"; | |
693 var id =spans[i].getAttribute("id"); | |
694 if (id != null) refs["#"+id] = n; | |
695 } | |
696 } | |
697 if (n == 0) | |
698 noteholder.parentNode.removeChild(noteholder); | |
699 else { | |
700 // Process footnoterefs. | |
701 for (i=0; i<spans.length; i++) { | |
702 if (spans[i].className == "footnoteref") { | |
703 var href = spans[i].getElementsByTagName("a")[0].getAttribute("href"); | |
704 href = href.match(/#.*/)[0]; // Because IE return full URL. | |
705 n = refs[href]; | |
706 spans[i].innerHTML = | |
707 "[<a href='#_footnote_" + n + | |
708 "' title='View footnote' class='footnote'>" + n + "</a>]"; | |
709 } | |
710 } | |
711 } | |
712 }, | |
713 | |
714 install: function(toclevels) { | |
715 var timerId; | |
716 | |
717 function reinstall() { | |
718 asciidoc.footnotes(); | |
719 if (toclevels) { | |
720 asciidoc.toc(toclevels); | |
721 } | |
722 } | |
723 | |
724 function reinstallAndRemoveTimer() { | |
725 clearInterval(timerId); | |
726 reinstall(); | |
727 } | |
728 | |
729 timerId = setInterval(reinstall, 500); | |
730 if (document.addEventListener) | |
731 document.addEventListener("DOMContentLoaded", reinstallAndRemoveTimer, false
); | |
732 else | |
733 window.onload = reinstallAndRemoveTimer; | |
734 } | |
735 | |
736 } | |
737 asciidoc.install(); | |
738 /*]]>*/ | |
739 </script> | |
740 </head> | |
741 <body class="manpage"> | |
742 <div id="header"> | |
743 <h1> | |
744 depot_tools_tutorial(7) Manual Page | |
745 </h1> | |
746 <h2>NAME</h2> | |
747 <div class="sectionbody"> | |
748 <p>depot_tools_tutorial - | |
749 A tutorial introduction to the Chromium depot_tools git extensions. | |
750 </p> | |
751 </div> | |
752 </div> | |
753 <div id="content"> | |
754 <div class="sect1"> | |
755 <h2 id="_description">DESCRIPTION</h2> | |
756 <div class="sectionbody"> | |
757 <div class="paragraph"><p>The Chromium <a href="depot_tools.html">depot_tools(7)
</a> suite contains many git workflow-enhancing | |
758 tools which are designed to work together to enable anyone to wrangle the | |
759 Chromium codebase expertly. This tutorial explains how to do development on | |
760 Chromium using these tools. This will cover:</p></div> | |
761 <div class="ulist"><ul> | |
762 <li> | |
763 <p> | |
764 <a href="#_setting_up">Setting up</a> | |
765 </p> | |
766 </li> | |
767 <li> | |
768 <p> | |
769 <a href="#_getting_the_code">Getting the code</a> | |
770 </p> | |
771 </li> | |
772 <li> | |
773 <p> | |
774 <a href="#_tl_dr">TL;DR</a> | |
775 </p> | |
776 </li> | |
777 <li> | |
778 <p> | |
779 <a href="#_creating_uploading_a_cl">Creating / Uploading a CL</a> | |
780 </p> | |
781 </li> | |
782 <li> | |
783 <p> | |
784 <a href="#_updating_the_code">Updating the code</a> | |
785 </p> | |
786 </li> | |
787 <li> | |
788 <p> | |
789 <a href="#_managing_multiple_cls">Managing multiple CLs</a> | |
790 </p> | |
791 </li> | |
792 <li> | |
793 <p> | |
794 <a href="#_managing_dependent_cls">Managing dependent CLs</a> | |
795 </p> | |
796 </li> | |
797 <li> | |
798 <p> | |
799 <a href="#_example_walkthrough">Example Walkthrough</a> | |
800 </p> | |
801 </li> | |
802 </ul></div> | |
803 <div class="paragraph"><p>Please refer to the manpages (or <code>--help</code> o
utput) for details about any of the | |
804 commands mentioned in this tutorial.</p></div> | |
805 <div class="admonitionblock"> | |
806 <table><tr> | |
807 <td class="icon"> | |
808 <div class="title">Note</div> | |
809 </td> | |
810 <td class="content">If your platform does not support manpages (or you prefer so
mething a bit more | |
811 expressive than plain text) you can find all documentation in <em>html</em> form
in the | |
812 <code>[DEPOT_TOOLS]/docs/html</code> folder.</td> | |
813 </tr></table> | |
814 </div> | |
815 <div class="sect2"> | |
816 <h3 id="_prerequisites">PREREQUISITES</h3> | |
817 <div class="paragraph"><p>This tutorial assumes basic familiarity with git termi
nology and concepts. If you | |
818 need to brush up on these, the following are very good resources:</p></div> | |
819 <div class="ulist"><ul> | |
820 <li> | |
821 <p> | |
822 <a href="http://think-like-a-git.net/">Think like (a) Git</a> - A lighthearted | |
823 overview of git. If you’re sorta-familiar with git, but not <em>comforta
ble</em> with | |
824 it, then give this a look. | |
825 </p> | |
826 </li> | |
827 <li> | |
828 <p> | |
829 <a href="http://gitimmersion.com/">Git Immersion Tutorial</a> - An in-depth git | |
830 tutorial. | |
831 </p> | |
832 </li> | |
833 <li> | |
834 <p> | |
835 <a href="http://pcottle.github.io/learnGitBranching">pcottle’s Visual Git | |
836 Branching</a> - An excellent interactive/graphical demo on how git handles | |
837 commits, branches, and shows the operations git performs on them. | |
838 </p> | |
839 </li> | |
840 <li> | |
841 <p> | |
842 <a href="http://git-scm.com/book">Pro Git book</a> - “The” book for
learning git | |
843 from basics to advanced concepts. A bit dry, but very through. | |
844 </p> | |
845 </li> | |
846 </ul></div> | |
847 <div class="paragraph"><p>If you’ve tried these out and are still having s
ome trouble getting started, | |
848 there are <em>many</em> other resources online which should help. If you’r
e <em>really</em> | |
849 <strong><em>really</em></strong> stuck, then chat up one of the Chromium infrast
ructure team | |
850 members for some pointers.</p></div> | |
851 <div class="dlist"><dl> | |
852 <dt class="hdlist1"> | |
853 Litmus Test | |
854 </dt> | |
855 <dd> | |
856 <p> | |
857 If you know what <code>git add</code>, <code>git status</code>, <code>git comm
it</code> do and you know | |
858 <em>essentially</em> what <code>git rebase</code> does, then you should know e
nough to follow | |
859 along. | |
860 </p> | |
861 </dd> | |
862 </dl></div> | |
863 </div> | |
864 </div> | |
865 </div> | |
866 <div class="sect1"> | |
867 <h2 id="_setting_up">SETTING UP</h2> | |
868 <div class="sectionbody"> | |
869 <div class="sect2"> | |
870 <h3 id="_get_depot_tools">GET DEPOT TOOLS</h3> | |
871 <div class="sect3"> | |
872 <h4 id="_linux_mac">LINUX / MAC</h4> | |
873 <div class="paragraph"><p>Clone the <em>depot_tools</em> repository:</p></div> | |
874 <div class="listingblock"> | |
875 <div class="content"> | |
876 <pre><code><strong><span class="white">$ git clone https://chromium.googlesource
.com/chromium/tools/depot_tools</span></strong></code></pre> | |
877 </div></div> | |
878 <div class="paragraph"><p>Add <em>depot_tools</em> to the <em>end</em> of your P
ATH and MANPATH (you will probably want | |
879 to put this in your <code>~/.bashrc</code> or <code>~/.zshrc</code>). Assuming y
ou cloned | |
880 <em>depot_tools</em> to <code>/path/to/depot_tools</code>:</p></div> | |
881 <div class="listingblock"> | |
882 <div class="content"> | |
883 <pre><code><strong><span class="white">$ export PATH=$PATH:/path/to/depot_tools<
/span></strong> | |
884 <strong><span class="white">$ export MANPATH=$MANPATH:/path/to/depot_tools/docs<
/span></strong> <b><1></b></code></pre> | |
885 </div></div> | |
886 <div class="colist arabic"><ol> | |
887 <li> | |
888 <p> | |
889 Observe that this path is <code>depot_tools/</code><strong><code>docs</code></st
rong>. | |
890 </p> | |
891 </li> | |
892 </ol></div> | |
893 </div> | |
894 <div class="sect3"> | |
895 <h4 id="_windows">WINDOWS</h4> | |
896 <div class="paragraph"><p>Download the <em>depot_tools</em> | |
897 <a href="https://src.chromium.org/svn/trunk/tools/depot_tools.zip">bundle</a> an
d | |
898 extract it somewhere.</p></div> | |
899 <div class="admonitionblock"> | |
900 <table><tr> | |
901 <td class="icon"> | |
902 <div class="title">Warning</div> | |
903 </td> | |
904 <td class="content"><strong>DO NOT</strong> use drag-n-drop or copy-n-paste extr
act from Explorer, this will not | |
905 extract the hidden “.git” folder which is necessary for <em>depot_to
ols</em> to | |
906 autoupdate itself. You can use “Extract all…” from the context
menu though.</td> | |
907 </tr></table> | |
908 </div> | |
909 <div class="paragraph"><p>Add <em>depot_tools</em> to the <em>end</em> of your P
ATH. Assuming you unzipped the | |
910 bundle to <code>C:\workspace\depot_tools</code>:</p></div> | |
911 <div class="dlist"><dl> | |
912 <dt class="hdlist1"> | |
913 With Administrator access: | |
914 </dt> | |
915 <dd> | |
916 <p> | |
917 <strong>Control Panel → System and Security → System → Advan
ced system settings</strong> | |
918 </p> | |
919 <div class="paragraph"><p>Modify the PATH system variable to include <code>C:\wo
rkspace\depot_tools</code>.</p></div> | |
920 </dd> | |
921 <dt class="hdlist1"> | |
922 Without Administrator access: | |
923 </dt> | |
924 <dd> | |
925 <p> | |
926 <strong>Control Panel → User Accounts → User Accounts → Chan
ge my environment variables</strong> | |
927 </p> | |
928 <div class="paragraph"><p>Add a PATH user variable: <code>%PATH%;C:\workspace\de
pot_tools</code>.</p></div> | |
929 </dd> | |
930 </dl></div> | |
931 <div class="paragraph"><p>From a <code>cmd.exe</code> shell, run the command <co
de>gclient</code> (without arguments). On first | |
932 run, gclient will install all the Windows-specific bits needed to work with the | |
933 code, including msysgit and python.</p></div> | |
934 <div class="admonitionblock"> | |
935 <table><tr> | |
936 <td class="icon"> | |
937 <div class="title">Note</div> | |
938 </td> | |
939 <td class="content"> | |
940 <div class="ulist"><ul> | |
941 <li> | |
942 <p> | |
943 If you run gclient from a non-cmd shell (e.g., cygwin, PowerShell), it | |
944 may appear to run properly, but msysgit, python, and other tools may not get | |
945 installed correctly. | |
946 </p> | |
947 </li> | |
948 <li> | |
949 <p> | |
950 If you see strange errors with the file system on the first run of gclient, | |
951 you may want to <a href="http://tortoisesvn.tigris.org/faq.html#cantmove2">dis
able | |
952 Windows Indexing</a>. | |
953 </p> | |
954 </li> | |
955 <li> | |
956 <p> | |
957 If you are running Windows XP and see errors like “The system cannot execu
te | |
958 the specified program”, try installing the | |
959 <a href="http://code.google.com/p/chromium/issues/detail?id=75886">“Micr
osoft | |
960 Visual C++ 2008 Redistributable Package”</a>. | |
961 </p> | |
962 </li> | |
963 </ul></div> | |
964 </td> | |
965 </tr></table> | |
966 </div> | |
967 </div> | |
968 </div> | |
969 <div class="sect2"> | |
970 <h3 id="_bootstrapping_configuration">BOOTSTRAPPING CONFIGURATION</h3> | |
971 <div class="paragraph"><p>If you have never used git before, you’ll need to set
some global git | |
972 configurations; substitute your name and email address in the following | |
973 commands:</p></div> | |
974 <div class="listingblock"> | |
975 <div class="content"> | |
976 <pre><code><strong><span class="white">$ git config --global user.name “Jo
hn Doe”</span></strong> | |
977 <strong><span class="white">$ git config --global user.email “jdoe@email.c
om”</span></strong> | |
978 <strong><span class="white">$ git config --global core.autocrlf false</span></st
rong> | |
979 <strong><span class="white">$ git config --global core.filemode false</span></st
rong> | |
980 <strong><span class="white">$</span></strong> # and for fun! | |
981 <strong><span class="white">$ git config --global color.ui true</span></strong><
/code></pre> | |
982 </div></div> | |
983 </div> | |
984 </div> | |
985 </div> | |
986 <div class="sect1"> | |
987 <h2 id="_tl_dr">TL;DR</h2> | |
988 <div class="sectionbody"> | |
989 <div class="listingblock"> | |
990 <div class="content"> | |
991 <pre><code><strong><span class="white">$</span></strong> # get the code | |
992 <strong><span class="white">$</span></strong> # In an empty directory: | |
993 <strong><span class="white">$ fetch {chromium,blink,...}</span></strong> | |
994 | |
995 <strong><span class="white">$</span></strong> # Update third_party repos and run
pre-compile hooks | |
996 <strong><span class="white">$ gclient sync</span></strong> | |
997 | |
998 <strong><span class="white">$</span></strong> # Make a new change and upload it
for review | |
999 <strong><span class="white">$ git new-branch branchname</span></strong> | |
1000 <strong><span class="white">$</span></strong> # repeat: [edit, git add, git comm
it] | |
1001 <strong><span class="white">$ git cl upload</span></strong> | |
1002 | |
1003 <strong><span class="white">$</span></strong> # After change is reviewed, commit
with the CQ | |
1004 <strong><span class="white">$ git cl set_commit</span></strong> | |
1005 <strong><span class="white">$</span></strong> # Note that the committed hash whi
ch lands will /not/ match the | |
1006 <strong><span class="white">$</span></strong> # commit hashes of your local bran
ch.</code></pre> | |
1007 </div></div> | |
1008 </div> | |
1009 </div> | |
1010 <div class="sect1"> | |
1011 <h2 id="_getting_the_code">GETTING THE CODE</h2> | |
1012 <div class="sectionbody"> | |
1013 <div class="paragraph"><p>Pick an empty directory and run one of the following:<
/p></div> | |
1014 <div class="listingblock"> | |
1015 <div class="content"> | |
1016 <pre><code><strong><span class="white">$ fetch chromium</span></strong> # Basic
checkout for desktop Chromium | |
1017 <strong><span class="white">$ fetch blink</span></strong> # Chromium code wi
th Blink checked out to tip-of-tree | |
1018 <strong><span class="white">$ fetch android</span></strong> # Chromium checkou
t for Android platform | |
1019 <strong><span class="white">$ fetch ios</span></strong> # Chromium checkou
t for iOS platform</code></pre> | |
1020 </div></div> | |
1021 <div class="paragraph"><p>When the <code>fetch</code> tool completes you should
have the following in your working | |
1022 directory:</p></div> | |
1023 <div class="listingblock"> | |
1024 <div class="content"> | |
1025 <pre><code><strong><span class="white">.gclient</span></strong> # A configurat
ion file for you source checkout | |
1026 <strong><span class="white">src/</span></strong> # Top-level Chromium sour
ce checkout.</code></pre> | |
1027 </div></div> | |
1028 <div class="paragraph"><p>If you are on linux, then you’ll need to run:</p
></div> | |
1029 <div class="listingblock"> | |
1030 <div class="content"> | |
1031 <pre><code><strong><span class="white">$ cd src && ./build/install-build
-deps.sh</span></strong></code></pre> | |
1032 </div></div> | |
1033 <div class="paragraph"><p>And finally:</p></div> | |
1034 <div class="listingblock"> | |
1035 <div class="content"> | |
1036 <pre><code><strong><span class="white">$ gclient sync</span></strong></code></pr
e> | |
1037 </div></div> | |
1038 <div class="paragraph"><p>This will pull all dependencies of the Chromium src ch
eckout. You will need | |
1039 to run this any time you update the main src checkout.</p></div> | |
1040 </div> | |
1041 </div> | |
1042 <div class="sect1"> | |
1043 <h2 id="_creating_uploading_a_cl">CREATING / UPLOADING A CL</h2> | |
1044 <div class="sectionbody"> | |
1045 <div class="admonitionblock"> | |
1046 <table><tr> | |
1047 <td class="icon"> | |
1048 <div class="title">Note</div> | |
1049 </td> | |
1050 <td class="content">The remainder of the tutorial assumes that your current work
ing directory | |
1051 is the <code>src/</code> folder mentioned in <a href="#_getting_the_code">Gettin
g the code</a>.</td> | |
1052 </tr></table> | |
1053 </div> | |
1054 <div class="paragraph"><p>Each CL corresponds exactly with a single branch in gi
t. Any time you want to | |
1055 begin a new CL, just:</p></div> | |
1056 <div class="listingblock"> | |
1057 <div class="content"> | |
1058 <pre><code><strong><span class="white">$ git new-branch <branch_name></spa
n></strong></code></pre> | |
1059 </div></div> | |
1060 <div class="paragraph"><p>This will create and checkout a new branch named <code
>branch_name</code> which will track | |
1061 the default upstream (which is <code>origin/master</code>). See <a href="git-new
-branch.html">git-new-branch(1)</a> | |
1062 for more features, such as the ability to track <em>LKGR</em>.</p></div> | |
1063 <div class="paragraph"><p>Commit as many changes as you like to this branch. Whe
n you want to upload it | |
1064 for review, run:</p></div> | |
1065 <div class="listingblock"> | |
1066 <div class="content"> | |
1067 <pre><code><strong><span class="white">$ git cl upload</span></strong></code></p
re> | |
1068 </div></div> | |
1069 <div class="paragraph"><p>This will take the diff of your branch against its ups
tream (<code>origin/master</code>), | |
1070 and will post it to the <a href="https://codereview.chromium.org">Chromium code | |
1071 review site</a>.</p></div> | |
1072 </div> | |
1073 </div> | |
1074 <div class="sect1"> | |
1075 <h2 id="_updating_the_code">UPDATING THE CODE</h2> | |
1076 <div class="sectionbody"> | |
1077 <div class="paragraph"><p>Inevitably, you’ll want to pull in changes from
the main Chromium repo. This is | |
1078 pretty easy with <em>depot_tools</em>:</p></div> | |
1079 <div class="listingblock"> | |
1080 <div class="content"> | |
1081 <pre><code><strong><span class="white">$ git rebase-update</span></strong></code
></pre> | |
1082 </div></div> | |
1083 <div class="paragraph"><p>This command will update all of your CLs to contain th
e latest code from their | |
1084 upstreams. It will also automatically clean up CLs which have been committed and | |
1085 a couple other nice things. See <a href="git-rebase-update.html">git-rebase-upda
te(1)</a> for the full | |
1086 scoop.</p></div> | |
1087 <div class="paragraph"><p>One thing to look out for are <em>merge conflicts</em>
. These happen for exactly the | |
1088 same as they do with SVN, but the experience is a little more controllable with | |
1089 git. <code>git rebase-update</code> will try to rebase all your branches for you
, but if it | |
1090 encounters a merge conflict in one, it will halt and leave you in a rebase | |
1091 conflict state (see <a href="git-rebase.html">git-rebase(1)</a>). Resolving <cod
e>git rebase</code> merge | |
1092 conflicts is beyond the scope of this tutorial, but there are many good sources | |
1093 online (see the <a href="#_prerequisites">Prerequisites</a> for some).</p></div> | |
1094 <div class="paragraph"><p>Sometimes you’re pretty certain that you’v
e committed a certain branch, but <code>git | |
1095 rebase-update</code> isn’t able to tell that for sure. This is usually bec
ause your | |
1096 branch doesn’t rebase cleanly. You could just delete the branch with <code
>git branch | |
1097 -D <branch></code>, but you’d like to double check the diff of your
branch against its | |
1098 upstream before deleting it. If this is the case you can abort the rebase | |
1099 started by <code>git rebase-update</code>, and then run <a href="git-squash-bran
ch.html">git-squash-branch(1)</a> to | |
1100 flatten your branch into a single commit. When you run <code>git rebase-update</
code> | |
1101 again, you’ll get a (hopefully) much smaller / saner diff. If it turns out
you | |
1102 were wrong about your branch being fully committed, you can use | |
1103 <a href="git-reflog.html">git-reflog(1)</a> to reset your branch back to where i
t was before. If the | |
1104 diff looks inconsequential, you can use <code>git rebase --skip</code> to ignore
it, and | |
1105 then <code>git rebase-update</code> will clean it up for you.</p></div> | |
1106 <div class="paragraph"><p>Once you’re done resolving all of the merge conf
lict, just run <code>git | |
1107 rebase-update</code>, and it will pick up where it left off. Once the command ha
s | |
1108 finished updating all of your branches, it will return you back to the branch | |
1109 you started on.</p></div> | |
1110 <div class="admonitionblock"> | |
1111 <table><tr> | |
1112 <td class="icon"> | |
1113 <div class="title">Note</div> | |
1114 </td> | |
1115 <td class="content">Running <code>git rebase-update</code> will update all your
branches, but it will not | |
1116 automatically run <code>gclient sync</code> to update your dependencies.</td> | |
1117 </tr></table> | |
1118 </div> | |
1119 </div> | |
1120 </div> | |
1121 <div class="sect1"> | |
1122 <h2 id="_managing_multiple_cls">MANAGING MULTIPLE CLS</h2> | |
1123 <div class="sectionbody"> | |
1124 <div class="paragraph"><p>Sometimes you want to work on more than one CL at once
(say, you have a CL | |
1125 posted for review and want to work on something else). For each CL that you | |
1126 want to work on, just use <code>git new-branch <branchname></code>.</p></d
iv> | |
1127 <div class="paragraph"><p>Once you start to have more than one CL at a time, it
can be easy to lose your | |
1128 bearings. Fortunately, <em>depot_tools</em> has two tools to help you out:</p></
div> | |
1129 <div class="listingblock"> | |
1130 <div class="content"> | |
1131 <pre><code><strong><span class="white">$ git map</span></strong> | |
1132 <span class="white blue-background">*</span>​<strong><span class="blue-bac
kground red"> 7dcfe47 </span></strong> <span class="green">(</span>​
<strong><span class="aqua">frozen_changes</span></strong>​<span class="gre
en">)</span> <span class="yellow">2014-03-12</span> ~ FREEZE.unindexed | |
1133 * <strong><span class="red">4b0c180</span></strong> <span class="yellow">
2014-03-12</span> ~ modfile | |
1134 * <strong><span class="red">59a7cca</span></strong> <span class="yellow">
2014-03-12</span> ~ a deleted file | |
1135 * <strong><span class="red">6bec695</span></strong> <span class="green">(
</span>​<span class="red">origin/master</span>​<span class="green">)
</span> <span class="yellow">2014-03-11</span> ~ Add neat feature <strong><sp
an class="white"><(frozen_changes)</span></strong> | |
1136 * <strong><span class="red">d15a38a</span></strong> <span class="yellow">
2014-03-11</span> ~ Epic README update | |
1137 * <strong><span class="red">d559894</span></strong> <span class="green">(
</span>​<strong><span class="lime">master</span></strong>​<span clas
s="green">)</span> <span class="yellow">2014-03-11</span> ~ Important upstream c
hange | |
1138 <span class="red">|</span> * <strong><span class="red">9c311fd</span></strong>
<span class="green">(</span>​<strong><span class="lime">cool_feature</
span></strong>​<span class="green">)</span> <span class="yellow">2014-03-1
1</span> ~ Respond to CL comments | |
1139 <span class="red">|</span> <span class="green">|</span> * <strong><span class="r
ed">2a1eeb2</span></strong> <span class="green">(</span>​<strong><span
class="lime">subfeature</span></strong>​<span class="green">)</span> <span
class="yellow">2014-03-11</span> ~ integrate with CoolService | |
1140 <span class="red">|</span> <span class="green">|</span> * <strong><span class="r
ed">d777af6</span></strong> <span class="yellow">2014-03-11</span> ~ slick co
mmenting action | |
1141 <span class="red">|</span> <span class="green">|/</span> | |
1142 <span class="red">|</span> * <strong><span class="red">265803a</span></strong>
<span class="yellow">2014-03-11</span> ~ another improvement <strong><spa
n class="white"><(subfeature)</span></strong> | |
1143 <span class="red">|</span> * <strong><span class="red">6d831ac</span></strong>
<span class="green">(</span>​<strong><span class="fuchsia">spleen_tag<
/span></strong>​<span class="green">)</span> <span class="yellow">2014-03-
11</span> ~ Refactor spleen | |
1144 <span class="red">|</span> * <strong><span class="red">82e74ab</span></strong>
<span class="yellow">2014-03-11</span> ~ Add widget | |
1145 <span class="red">|/</span> | |
1146 * <strong><span class="red">d08c5b3</span></strong> <span class="green">(
</span>​<strong><span class="lime">bogus_noparent</span></strong>​<s
pan class="green">)</span> <span class="yellow">2014-03-11</span> ~ Wonderful be
ginnings <strong><span class="white"><(cool_feature)</span></strong></code
></pre> | |
1147 </div></div> | |
1148 <div class="paragraph"><p>Note that this example repo is in dire need of a <a hr
ef="git-rebase-update.html">git-rebase-update(1)</a>!</p></div> | |
1149 <div class="listingblock"> | |
1150 <div class="content"> | |
1151 <pre><code><strong><span class="white">$ git map-branches</span></strong> | |
1152 <span class="red">origin/master</span> | |
1153 <span class="green">cool_feature</span> | |
1154 <span class="green">subfeature</span> | |
1155 <span class="aqua">frozen_changes *</span> | |
1156 <span class="green">master</span></code></pre> | |
1157 </div></div> | |
1158 <div class="dlist"><dl> | |
1159 <dt class="hdlist1"> | |
1160 <a href="git-map.html">git-map(1)</a> | |
1161 </dt> | |
1162 <dd> | |
1163 <p> | |
1164 This tool shows you the history of all of your branches in a pseudo-graphical | |
1165 format. In particular, it will show you which commits all of your branches | |
1166 are on, which commit you currently have checked out, and more. Check out the | |
1167 doc for the full details. | |
1168 </p> | |
1169 </dd> | |
1170 <dt class="hdlist1"> | |
1171 <a href="git-map-branches.html">git-map-branches(1)</a> | |
1172 </dt> | |
1173 <dd> | |
1174 <p> | |
1175 This tool just shows you which branches you have in your repo, and thier | |
1176 upstream relationship to each other (as well as which branch you have checked | |
1177 out at the moment). | |
1178 </p> | |
1179 </dd> | |
1180 </dl></div> | |
1181 <div class="paragraph"><p>Additionally, sometimes you need to switch between bra
nches, but you’ve got work | |
1182 in progress. You could use <a href="git-stash.html">git-stash(1)</a>, but that c
an be tricky to | |
1183 manage because you need to remember which branches you stashed what changes on. | |
1184 Helpfully <em>depot_tools</em> includes two tools which can greatly assist in ca
se:</p></div> | |
1185 <div class="paragraph"><p><a href="git-freeze.html">git-freeze(1)</a> allows you
to put the current branch in 'suspended | |
1186 animation' by committing your changes to a specially-named commit on the top of | |
1187 your current branch. When you come back to your branch later, you can just run | |
1188 <a href="git-thaw.html">git-thaw(1)</a> to get your work-in-progress changes bac
k to what they were.</p></div> | |
1189 <div class="paragraph"><p>Another useful tool is <a href="git-rename-branch.html
">git-rename-branch(1)</a>. Unlike <code>git branch -m <old> | |
1190 <new></code>, this tool will correctly preserve the upstream relationships
of your | |
1191 branch compared to its downstreams.</p></div> | |
1192 <div class="paragraph"><p>Finally, take a look at <a href="git-upstream-diff.htm
l">git-upstream-diff(1)</a>. This will show you the | |
1193 combined diff for all the commits on your branch against the upstream tracking | |
1194 branch. This is <em>exactly</em> what <code>git cl upload</code> will push up to
code review. | |
1195 Additionally, consider trying the <code>--wordwise</code> argument to get a colo
rized | |
1196 per-word diff (instead of a per-line diff).</p></div> | |
1197 </div> | |
1198 </div> | |
1199 <div class="sect1"> | |
1200 <h2 id="_managing_dependent_cls">MANAGING DEPENDENT CLS</h2> | |
1201 <div class="sectionbody"> | |
1202 <div class="paragraph"><p>Now that you know how to manage <em>independent</em> C
Ls, we’ll see how to manage | |
1203 <em>dependent</em> CLs. Dependent CLs are useful when your second (or third or f
ourth | |
1204 or …) CL depends on the changes in one of your other CLs (such as: CL 2 wo
n’t | |
1205 compile without CL 1, but you want to submit them as two separate reviews).</p><
/div> | |
1206 <div class="paragraph"><p>Like all of the other CLs we’ve created, we use
<a href="git-new-branch.html">git-new-branch(1)</a>, but | |
1207 this time with an extra argument. First, <code>git checkout</code> the branch | |
1208 you want to base the new one on (i.e. CL 1), and then run:</p></div> | |
1209 <div class="listingblock"> | |
1210 <div class="content"> | |
1211 <pre><code><strong><span class="white">$ git new-branch --upstream_current <b
ranch_name></span></strong></code></pre> | |
1212 </div></div> | |
1213 <div class="paragraph"><p>This will make a new branch which tracks the <em>curre
nt</em> branch as its upstream | |
1214 (as opposed to <em>origin/master</em>). All changes you commit to this branch wi
ll be | |
1215 in addition to the previous branch, but when you <code>git cl upload</code>, you
will only | |
1216 upload the diff for the dependent (child) branch. You may have as many branches | |
1217 nested in this fashion as you like.</p></div> | |
1218 <div class="paragraph"><p><a href="git-map.html">git-map(1)</a> and <a href="git
-map-branches.html">git-map-branches(1)</a> are particularly helpful when | |
1219 you have dependent branches. In addition, there are two helper commands which | |
1220 let you traverse your working copy up and down this tree of branches: | |
1221 <a href="git-nav-upstream.html">git-nav-upstream(1)</a> and <a href="git-nav-dow
nstream.html">git-nav-downstream(1)</a>.</p></div> | |
1222 <div class="paragraph"><p>Sometimes when dealing with dependent CLs, it turns ou
t that you accidentally | |
1223 based a branch on the wrong upstream, but since then you’ve committed chan
ges to | |
1224 it, or even based <em>another</em> branch off of that one. Or you discover that
you | |
1225 have two independent CLs that would actually be much better off as dependent | |
1226 CLs. In instances like these, you can check out the offending branch and use | |
1227 <a href="git-reparent-branch.html">git-reparent-branch(1)</a> to move it to trac
k a different parent. Note that | |
1228 this can also be used to move a branch from tracking <code>origin/master</code>
to <code>lkgr</code> | |
1229 or vice versa.</p></div> | |
1230 </div> | |
1231 </div> | |
1232 <div class="sect1"> | |
1233 <h2 id="_example_walkthrough">EXAMPLE WALKTHROUGH</h2> | |
1234 <div class="sectionbody"> | |
1235 <div class="paragraph"><p>This section will demo what a typical workflow looks l
ike when writing, | |
1236 updating, and committing multiple CLs.</p></div> | |
1237 <div class="paragraph"><p></p></div><div class="listingblock"><div class="conten
t"><pre><code><span style="font-weight: bold; color: #ffffff">$ fetch chromium</
span> | |
1238 ... truncated output ... | |
1239 <span style="font-weight: bold; color: #ffffff">$ cd src</span> | |
1240 </code></pre></div></div><p><div class="paragraph"> (only on linux)</p></div><di
v class="listingblock"><div class="content"><pre><code><span style="font-weight:
bold; color: #ffffff">$ ./build/install-build-deps.sh</span> | |
1241 ... truncated output ... | |
1242 </code></pre></div></div><p><div class="paragraph"> Pull in all dependencies for
HEAD</p></div><div class="listingblock"><div class="content"><pre><code><span s
tyle="font-weight: bold; color: #ffffff">$ gclient sync</span> | |
1243 ... truncated output ... | |
1244 </code></pre></div></div><p><div class="paragraph"> Let's fix something!</p></di
v><div class="listingblock"><div class="content"><pre><code><span style="font-we
ight: bold; color: #ffffff">$ git new-branch fix_typo</span> | |
1245 <span style="font-weight: bold; color: #ffffff">$ echo -e '/Banana\ns/Banana/Kuu
n\nwq' | ed build/whitespace_file.txt</span> | |
1246 1503 | |
1247 It was a Domo-Banana. | |
1248 It was a Domo-Kuun. | |
1249 1501 | |
1250 <span style="font-weight: bold; color: #ffffff">$ git commit -am 'Fix terrible t
ypo.'</span> | |
1251 [fix_typo 615ffa7] Fix terrible typo. | |
1252 1 file changed, 1 insertion(+), 1 deletion(-) | |
1253 <span style="font-weight: bold; color: #ffffff">$ git map</span> | |
1254 <span style="background-color: #492ee1"></span><span style="font-weight: bold; b
ackground-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e1
6; background-color: #492ee1">615ffa7 </span><span style="color: #19c518"> (</
span><span style="color: #33d6e5"></span><span style="font-weight: bold; color:
#33d6e5">fix_typo</span><span style="font-weight: bold"></span><span style="font
-weight: bold"></span><span style="color: #19c518">) </span><span style="color:
#e7e71c">2014-04-10</span> ~ Fix terrible typo. | |
1255 * <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span sty
le="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><s
pan style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</sp
an><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10
</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span
><span style="font-weight: bold; color: #ffffff"> <(fix_typo)</span><span
style="font-weight: bold"></span><span style="font-weight: bold"></span> | |
1256 * <span style="font-weight: bold; color: #e42e16">41290e0 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don
't use glibc-specific execinfo.h on uclibc builds | |
1257 * <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fs
p] Add requestUnmount() method together with the request manager. | |
1258 * <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ lin
ux_aura: Use system configuration for middle clicking the titlebar. | |
1259 * <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Con
tentView->ContentViewCore in ContentViewRenderView | |
1260 * <span style="font-weight: bold; color: #e42e16">2250f53 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozo
ne: evdev: Filter devices by path | |
1261 * <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Alw
ays output seccomp error messages to stderr | |
1262 <span style="font-weight: bold; color: #ffffff">$ git status</span> | |
1263 On branch fix_typo | |
1264 Your branch is ahead of 'origin/master' by 1 commit. | |
1265 (use "git push" to publish your local commits) | |
1266 | |
1267 nothing to commit, working directory clean | |
1268 <span style="font-weight: bold; color: #ffffff">$ git cl upload -r domo@chromium
.org --send-mail</span> | |
1269 ... truncated output ... | |
1270 </code></pre></div></div><p><div class="paragraph"> While we wait for feedback,
let's do something else.</p></div><div class="listingblock"><div class="content"
><pre><code><span style="font-weight: bold; color: #ffffff">$ git new-branch cha
p2</span> | |
1271 <span style="font-weight: bold; color: #ffffff">$ git map-branches</span> | |
1272 <span style="color: #e42e16"></span><span style="font-weight: bold; color: #e42e
16">origin/master | |
1273 </span><span style="font-weight: bold; color: #33d6e5"></span><span style="font-
weight: bold; color: #33d6e5"> chap2 * | |
1274 </span><span style="font-weight: bold; color: #19c518"></span><span style="color
: #19c518"> fix_typo | |
1275 </span><span style="font-weight: bold; color: #ffffff">$ cat >> build/whit
espace_file.txt <<EOF</span> | |
1276 | |
1277 "You recall what happened on Mulholland drive?" The ceiling fan rotated slowly | |
1278 overhead, barely disturbing the thick cigarette smoke. No doubt was left about | |
1279 when the fan was last cleaned. | |
1280 EOF | |
1281 <span style="font-weight: bold; color: #ffffff">$ git status</span> | |
1282 On branch chap2 | |
1283 Your branch is up-to-date with 'origin/master'. | |
1284 | |
1285 Changes not staged for commit: | |
1286 (use "git add <file>..." to update what will be committed) | |
1287 (use "git checkout -- <file>..." to discard changes in working directory
) | |
1288 | |
1289 <span style="color: #e42e16">modified: build/whitespace_file.txt</span
> | |
1290 | |
1291 no changes added to commit (use "git add" and/or "git commit -a") | |
1292 </code></pre></div></div><p><div class="paragraph"> Someone on the code review p
ointed out that our typo-fix has a typo :( We're still working on 'chap2' but we
really want to land 'fix_typo', so let's switch over and fix it.</p></div><div
class="listingblock"><div class="content"><pre><code><span style="font-weight: b
old; color: #ffffff">$ git freeze</span> | |
1293 <span style="font-weight: bold; color: #ffffff">$ git checkout fix_typo</span> | |
1294 Switched to branch 'fix_typo' | |
1295 Your branch is ahead of 'origin/master' by 1 commit. | |
1296 (use "git push" to publish your local commits) | |
1297 <span style="font-weight: bold; color: #ffffff">$ echo -e '/Kuun\ns/Kuun/Kun\nwq
' | ed build/whitespace_file.txt</span> | |
1298 1501 | |
1299 It was a Domo-Kuun. | |
1300 It was a Domo-Kun. | |
1301 1500 | |
1302 <span style="font-weight: bold; color: #ffffff">$ git upstream-diff --wordwise</
span> | |
1303 <span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/w
hitespace_file.txt</span> | |
1304 <span style="font-weight: bold">index 3eba355..57cdcee 100644</span> | |
1305 <span style="font-weight: bold">--- a/build/whitespace_file.txt</span> | |
1306 <span style="font-weight: bold">+++ b/build/whitespace_file.txt</span> | |
1307 <span style="color: #33d6e5">@@ -17,7 +17,7 @@</span> swept up the streets (for
it is in London that our scene lies), rattling along | |
1308 the housetops, and fiercely agitating the scanty flame of the lamps that | |
1309 struggled against the elements. A hooded figure emerged. | |
1310 | |
1311 It was a Domo-<span style="color: #e42e16">Banana</span><span style="color: #19c
518">Kun</span>. | |
1312 | |
1313 "What took you so long?", inquired his wife. | |
1314 | |
1315 <span style="font-weight: bold; color: #ffffff">$ git commit -am 'Fix typo for g
ood!'</span> | |
1316 [fix_typo 2c0ad9c] Fix typo for good! | |
1317 1 file changed, 1 insertion(+), 1 deletion(-) | |
1318 <span style="font-weight: bold; color: #ffffff">$ git cl upload</span> | |
1319 ... truncated output ... | |
1320 </code></pre></div></div><p><div class="paragraph"> Since we got lgtm, let the C
Q land it.</p></div><div class="listingblock"><div class="content"><pre><code><s
pan style="font-weight: bold; color: #ffffff">$ git cl set_commit</span> | |
1321 <span style="font-weight: bold; color: #ffffff">$ git map</span> | |
1322 * <span style="font-weight: bold; color: #e42e16">0e2e52e </span><span sty
le="color: #19c518"> (</span><span style="color: #19c518"></span><span style="fo
nt-weight: bold; color: #19c518">chap2</span><span style="font-weight: bold"></s
pan><span style="font-weight: bold"></span><span style="color: #19c518">) </span
><span style="color: #e7e71c">2014-04-10</span> ~ FREEZE.unindexed | |
1323 <span style="color: #e42e16">|</span> <span style="background-color: #492ee1"></
span><span style="font-weight: bold; background-color: #492ee1">* </span><span s
tyle="font-weight: bold; color: #e42e16; background-color: #492ee1">2c0ad9c
</span><span style="color: #19c518"> (</span><span style="color: #33d6e5"></span
><span style="font-weight: bold; color: #33d6e5">fix_typo</span><span style="fon
t-weight: bold"></span><span style="font-weight: bold"></span><span style="color
: #19c518">) </span><span style="color: #e7e71c">2014-04-10</span> ~ Fix typo fo
r good! | |
1324 <span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #
e42e16">615ffa7 </span><span style="color: #19c518"></span> <span style="color:
#e7e71c">2014-04-10</span> ~ Fix terrible typo. | |
1325 <span style="color: #e42e16">|</span><span style="color: #e42e16">/</span> | |
1326 * <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span sty
le="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><s
pan style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</sp
an><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10
</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span
><span style="font-weight: bold; color: #ffffff"> <(chap2, fix_typo)</span
><span style="font-weight: bold"></span><span style="font-weight: bold"></span> | |
1327 * <span style="font-weight: bold; color: #e42e16">41290e0 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don
't use glibc-specific execinfo.h on uclibc builds | |
1328 * <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fs
p] Add requestUnmount() method together with the request manager. | |
1329 * <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ lin
ux_aura: Use system configuration for middle clicking the titlebar. | |
1330 * <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Con
tentView->ContentViewCore in ContentViewRenderView | |
1331 * <span style="font-weight: bold; color: #e42e16">2250f53 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozo
ne: evdev: Filter devices by path | |
1332 * <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Alw
ays output seccomp error messages to stderr | |
1333 </code></pre></div></div><p><div class="paragraph"> Switch back to where we were
using the nav* commands (for fun... git checkout would work here too)</p></div>
<div class="listingblock"><div class="content"><pre><code><span style="font-weig
ht: bold; color: #ffffff">$ git map-branches</span> | |
1334 <span style="color: #e42e16"></span><span style="color: #e42e16">origin/master | |
1335 </span><span style="color: #19c518"></span><span style="color: #19c518"> chap2 | |
1336 </span><span style="color: #33d6e5"></span><span style="font-weight: bold; color
: #33d6e5"> fix_typo * | |
1337 </span><span style="font-weight: bold; color: #ffffff">$ git nav-upstream</span> | |
1338 Note: checking out 'origin/master'. | |
1339 | |
1340 You are in 'detached HEAD' state. You can look around, make experimental | |
1341 changes and commit them, and you can discard any commits you make in this | |
1342 state without impacting any branches by performing another checkout. | |
1343 | |
1344 If you want to create a new branch to retain commits you create, you may | |
1345 do so (now or later) by using -b with the checkout command again. Example: | |
1346 | |
1347 git checkout -b new_branch_name | |
1348 | |
1349 HEAD is now at beec6f4... Make ReflectorImpl use mailboxes | |
1350 <span style="font-weight: bold; color: #ffffff">$ git nav-downstream</span> | |
1351 Please select a downstream branch | |
1352 0. chap2 | |
1353 1. fix_typo | |
1354 Selection (0-1)[0]: 0 | |
1355 Previous HEAD position was beec6f4... Make ReflectorImpl use mailboxes | |
1356 Switched to branch 'chap2' | |
1357 Your branch is ahead of 'origin/master' by 1 commit. | |
1358 (use "git push" to publish your local commits) | |
1359 <span style="font-weight: bold; color: #ffffff">$ git map-branches</span> | |
1360 <span style="color: #e42e16"></span><span style="color: #e42e16">origin/master | |
1361 </span><span style="color: #33d6e5"></span><span style="font-weight: bold; color
: #33d6e5"> chap2 * | |
1362 </span><span style="font-weight: bold; color: #19c518"></span><span style="color
: #19c518"> fix_typo | |
1363 </code></pre></div></div><p><div class="paragraph"> Now we can pick up on chapte
r2 where we left off.</p></div><div class="listingblock"><div class="content"><p
re><code></span><span style="font-weight: bold; color: #ffffff">$ git thaw</span
> | |
1364 <span style="font-weight: bold; color: #ffffff">$ git diff</span> | |
1365 <span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/w
hitespace_file.txt</span> | |
1366 <span style="font-weight: bold">index 3eba355..9d08d9d 100644</span> | |
1367 <span style="font-weight: bold">--- a/build/whitespace_file.txt</span> | |
1368 <span style="font-weight: bold">+++ b/build/whitespace_file.txt</span> | |
1369 <span style="color: #33d6e5">@@ -34,3 +34,7 @@</span> with his fork, watching th
e runny jelly spread and pool across his plate, | |
1370 like the blood of a dying fawn. \"It reminds me of that time --\" he started, a
s | |
1371 his wife cut in quickly: \"-- please. I can't bear to hear it.\". A flury of | |
1372 images coming from the past flowed through his mind. | |
1373 <span style="color: #19c518">+</span> | |
1374 <span style="color: #19c518">+</span><span style="color: #19c518">"You recall wh
at happened on Mulholland drive?" The ceiling fan rotated slowly</span> | |
1375 <span style="color: #19c518">+</span><span style="color: #19c518">overhead, bare
ly disturbing the thick cigarette smoke. No doubt was left about</span> | |
1376 <span style="color: #19c518">+</span><span style="color: #19c518">when the fan w
as last cleaned.</span> | |
1377 <span style="font-weight: bold; color: #ffffff">$ cat >> build/whitespace_
file.txt <<EOF</span> | |
1378 | |
1379 There was an poignant pause. | |
1380 EOF | |
1381 <span style="font-weight: bold; color: #ffffff">$ git diff</span> | |
1382 <span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/w
hitespace_file.txt</span> | |
1383 <span style="font-weight: bold">index 3eba355..e3a55de 100644</span> | |
1384 <span style="font-weight: bold">--- a/build/whitespace_file.txt</span> | |
1385 <span style="font-weight: bold">+++ b/build/whitespace_file.txt</span> | |
1386 <span style="color: #33d6e5">@@ -34,3 +34,9 @@</span> with his fork, watching th
e runny jelly spread and pool across his plate, | |
1387 like the blood of a dying fawn. \"It reminds me of that time --\" he started, a
s | |
1388 his wife cut in quickly: \"-- please. I can't bear to hear it.\". A flury of | |
1389 images coming from the past flowed through his mind. | |
1390 <span style="color: #19c518">+</span> | |
1391 <span style="color: #19c518">+</span><span style="color: #19c518">"You recall wh
at happened on Mulholland drive?" The ceiling fan rotated slowly</span> | |
1392 <span style="color: #19c518">+</span><span style="color: #19c518">overhead, bare
ly disturbing the thick cigarette smoke. No doubt was left about</span> | |
1393 <span style="color: #19c518">+</span><span style="color: #19c518">when the fan w
as last cleaned.</span> | |
1394 <span style="color: #19c518">+</span> | |
1395 <span style="color: #19c518">+</span><span style="color: #19c518">There was an p
oignant pause.</span> | |
1396 <span style="font-weight: bold; color: #ffffff">$ git commit -am 'Finish chapter
2'</span> | |
1397 [chap2 ceef712] Finish chapter 2 | |
1398 1 file changed, 6 insertions(+) | |
1399 <span style="font-weight: bold; color: #ffffff">$ git map</span> | |
1400 <span style="background-color: #492ee1"></span><span style="font-weight: bold; b
ackground-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e1
6; background-color: #492ee1">ceef712 </span><span style="color: #19c518"> (</
span><span style="color: #33d6e5"></span><span style="font-weight: bold; color:
#33d6e5">chap2</span><span style="font-weight: bold"></span><span style="font-we
ight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7
e71c">2014-04-10</span> ~ Finish chapter 2 | |
1401 <span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #
e42e16">2c0ad9c </span><span style="color: #19c518"> (</span><span style="color:
#19c518"></span><span style="font-weight: bold; color: #19c518">fix_typo</span>
<span style="font-weight: bold"></span><span style="font-weight: bold"></span><s
pan style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</spa
n> ~ Fix typo for good! | |
1402 <span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #
e42e16">615ffa7 </span><span style="color: #19c518"></span> <span style="color:
#e7e71c">2014-04-10</span> ~ Fix terrible typo. | |
1403 <span style="color: #e42e16">|</span><span style="color: #e42e16">/</span> | |
1404 * <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span sty
le="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><s
pan style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</sp
an><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10
</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span
><span style="font-weight: bold; color: #ffffff"> <(chap2, fix_typo)</span
><span style="font-weight: bold"></span><span style="font-weight: bold"></span> | |
1405 * <span style="font-weight: bold; color: #e42e16">41290e0 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don
't use glibc-specific execinfo.h on uclibc builds | |
1406 * <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fs
p] Add requestUnmount() method together with the request manager. | |
1407 * <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ lin
ux_aura: Use system configuration for middle clicking the titlebar. | |
1408 * <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Con
tentView->ContentViewCore in ContentViewRenderView | |
1409 * <span style="font-weight: bold; color: #e42e16">2250f53 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozo
ne: evdev: Filter devices by path | |
1410 * <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Alw
ays output seccomp error messages to stderr | |
1411 <span style="font-weight: bold; color: #ffffff">$ git cl upload -r domo@chromium
.org --send-mail</span> | |
1412 ... truncated output ... | |
1413 </code></pre></div></div><p><div class="paragraph"> We poke a committer until th
ey lgtm :)</p></div><div class="listingblock"><div class="content"><pre><code><s
pan style="font-weight: bold; color: #ffffff">$ git cl set_commit</span> | |
1414 </code></pre></div></div><p><div class="paragraph"> While that runs through the
CQ, let's get started on chapter 3. Since we know that chapter 3 depends on chap
ter 2, we'll track the current chapter2 branch.</p></div><div class="listingbloc
k"><div class="content"><pre><code><span style="font-weight: bold; color: #fffff
f">$ git new-branch --upstream_current chap3</span> | |
1415 <span style="font-weight: bold; color: #ffffff">$ cat >> build/whitespace_
file.txt <<EOF</span> | |
1416 | |
1417 CHAPTER 3: | |
1418 Mr. Usagi felt that something wasn't right. Shortly after the Domo-Kun left he | |
1419 began feeling sick. | |
1420 EOF | |
1421 <span style="font-weight: bold; color: #ffffff">$ git commit -am 'beginning of c
hapter 3'</span> | |
1422 [chap3 7d4238a] beginning of chapter 3 | |
1423 1 file changed, 4 insertions(+) | |
1424 <span style="font-weight: bold; color: #ffffff">$ git map</span> | |
1425 <span style="background-color: #492ee1"></span><span style="font-weight: bold; b
ackground-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e1
6; background-color: #492ee1">7d4238a </span><span style="color: #19c518"> (</
span><span style="color: #33d6e5"></span><span style="font-weight: bold; color:
#33d6e5">chap3</span><span style="font-weight: bold"></span><span style="font-we
ight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7
e71c">2014-04-10</span> ~ beginning of chapter 3 | |
1426 * <span style="font-weight: bold; color: #e42e16">ceef712 </span><span sty
le="color: #19c518"> (</span><span style="color: #19c518"></span><span style="fo
nt-weight: bold; color: #19c518">chap2</span><span style="font-weight: bold"></s
pan><span style="font-weight: bold"></span><span style="color: #19c518">) </span
><span style="color: #e7e71c">2014-04-10</span> ~ Finish chapter 2<span style="f
ont-weight: bold"></span><span style="font-weight: bold; color: #ffffff"> <
;(chap3)</span><span style="font-weight: bold"></span><span style="font-weight:
bold"></span> | |
1427 <span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #
e42e16">2c0ad9c </span><span style="color: #19c518"> (</span><span style="color:
#19c518"></span><span style="font-weight: bold; color: #19c518">fix_typo</span>
<span style="font-weight: bold"></span><span style="font-weight: bold"></span><s
pan style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10</spa
n> ~ Fix typo for good! | |
1428 <span style="color: #e42e16">|</span> * <span style="font-weight: bold; color: #
e42e16">615ffa7 </span><span style="color: #19c518"></span> <span style="color:
#e7e71c">2014-04-10</span> ~ Fix terrible typo. | |
1429 <span style="color: #e42e16">|</span><span style="color: #e42e16">/</span> | |
1430 * <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span sty
le="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><s
pan style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</sp
an><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10
</span> ~ Make ReflectorImpl use mailboxes<span style="font-weight: bold"></span
><span style="font-weight: bold; color: #ffffff"> <(chap2, fix_typo)</span
><span style="font-weight: bold"></span><span style="font-weight: bold"></span> | |
1431 * <span style="font-weight: bold; color: #e42e16">41290e0 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don
't use glibc-specific execinfo.h on uclibc builds | |
1432 * <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fs
p] Add requestUnmount() method together with the request manager. | |
1433 * <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ lin
ux_aura: Use system configuration for middle clicking the titlebar. | |
1434 * <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Con
tentView->ContentViewCore in ContentViewRenderView | |
1435 * <span style="font-weight: bold; color: #e42e16">2250f53 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozo
ne: evdev: Filter devices by path | |
1436 * <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Alw
ays output seccomp error messages to stderr | |
1437 </code></pre></div></div><p><div class="paragraph"> We haven't updated the code
in a while, so let's do that now.</p></div><div class="listingblock"><div class=
"content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git rebas
e-update</span> | |
1438 Fetching origin | |
1439 From https://upstream | |
1440 beec6f4..59cdb73 master -> origin/master | |
1441 Rebasing: chap2 | |
1442 Rebasing: fix_typo | |
1443 Failed! Attempting to squash fix_typo ... Success! | |
1444 Rebasing: chap3 | |
1445 Deleted branch fix_typo (was 5d26fec). | |
1446 Reparented chap3 to track origin/master (was tracking chap2) | |
1447 Deleted branch chap2 (was 5d26fec). | |
1448 </code></pre></div></div><p><div class="paragraph"> Well look at that. The CQ la
nded our typo and chapter2 branches already and git rebase-update cleaned them
up for us.</p></div><div class="listingblock"><div class="content"><pre><code><s
pan style="font-weight: bold; color: #ffffff">$ gclient sync</span> | |
1449 ... truncated output ... | |
1450 <span style="font-weight: bold; color: #ffffff">$ git map</span> | |
1451 <span style="background-color: #492ee1"></span><span style="font-weight: bold; b
ackground-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e1
6; background-color: #492ee1">93fe917 </span><span style="color: #19c518"> (</
span><span style="color: #33d6e5"></span><span style="font-weight: bold; color:
#33d6e5">chap3</span><span style="font-weight: bold"></span><span style="font-we
ight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7
e71c">2014-04-10</span> ~ beginning of chapter 3 | |
1452 * <span style="font-weight: bold; color: #e42e16">5d26fec </span><span sty
le="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><s
pan style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</sp
an><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10
</span> ~ Finish chapter 2<span style="font-weight: bold"></span><span style="fo
nt-weight: bold; color: #ffffff"> <(chap3)</span><span style="font-weight:
bold"></span><span style="font-weight: bold"></span> | |
1453 * <span style="font-weight: bold; color: #e42e16">df7fefb </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Rev
ert 255617, due to it not tracking use of the link doctor page properly. | |
1454 * <span style="font-weight: bold; color: #e42e16">4b39cda </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix
terrible typo. | |
1455 * <span style="font-weight: bold; color: #e42e16">248c5b6 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Tem
porarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup. | |
1456 * <span style="font-weight: bold; color: #e42e16">8171df8 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Rem
ove AMD family check for the flapper crypto accelerator. | |
1457 * <span style="font-weight: bold; color: #e42e16">d6a30d2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Cha
nge the Pica load benchmark to listen for the polymer-ready event | |
1458 * <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Mak
e ReflectorImpl use mailboxes | |
1459 * <span style="font-weight: bold; color: #e42e16">41290e0 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don
't use glibc-specific execinfo.h on uclibc builds | |
1460 * <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fs
p] Add requestUnmount() method together with the request manager. | |
1461 * <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ lin
ux_aura: Use system configuration for middle clicking the titlebar. | |
1462 * <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Con
tentView->ContentViewCore in ContentViewRenderView | |
1463 * <span style="font-weight: bold; color: #e42e16">2250f53 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozo
ne: evdev: Filter devices by path | |
1464 * <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Alw
ays output seccomp error messages to stderr | |
1465 </code></pre></div></div><p><div class="paragraph"> Someone on IRC mentions that
they actually landed a chapter 3 already! We should pull their changes before c
ontinuing. Brace for a code conflict!</p></div><div class="listingblock"><div cl
ass="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ git r
ebase-update</span> | |
1466 Fetching origin | |
1467 From https://upstream | |
1468 5d26fec..59cdb73 master -> origin/master | |
1469 Rebasing: chap2 | |
1470 ... lots of output, it's a conflict alright :(... | |
1471 <span style="font-weight: bold; color: #ffffff">$ git diff</span> | |
1472 <span style="font-weight: bold">diff --cc build/whitespace_file.txt</span> | |
1473 <span style="font-weight: bold">index 1293282,f903ea2..0000000</span> | |
1474 <span style="font-weight: bold">--- a/build/whitespace_file.txt</span> | |
1475 <span style="font-weight: bold">+++ b/build/whitespace_file.txt</span> | |
1476 <span style="color: #33d6e5">@@@ -42,4 -42,5 +42,9 @@@</span> when the fan was l
ast cleaned | |
1477 There was an poignant pause. | |
1478 | |
1479 CHAPTER 3: | |
1480 <span style="color: #19c518">++<<<<<<< HEAD</span> | |
1481 <span style="color: #19c518"> +Hilariousness! This chapter is awesome!</span> | |
1482 <span style="color: #19c518">++=======</span> | |
1483 <span style="color: #19c518">+ Mr. Usagi felt that something wasn't right. Short
ly after the Domo-Kun left he</span> | |
1484 <span style="color: #19c518">+ began feeling sick.</span> | |
1485 <span style="color: #19c518">++>>>>>>> beginning of chapter
3</span> | |
1486 </code></pre></div></div><p><div class="paragraph"> Oh, well, that's not too bad
. In fact... that's a terrible chapter 3!</p></div><div class="listingblock"><di
v class="content"><pre><code><span style="font-weight: bold; color: #ffffff">$ $
EDITOR build/whitespace_file.txt</span> | |
1487 ... /me deletes bad chapter 3 ... | |
1488 <span style="font-weight: bold; color: #ffffff">$ git add build/whitespace_file.
txt</span> | |
1489 <span style="font-weight: bold; color: #ffffff">$ git diff --cached</span> | |
1490 <span style="font-weight: bold">diff --git a/build/whitespace_file.txt b/build/w
hitespace_file.txt</span> | |
1491 <span style="font-weight: bold">index 1293282..f903ea2 100644</span> | |
1492 <span style="font-weight: bold">--- a/build/whitespace_file.txt</span> | |
1493 <span style="font-weight: bold">+++ b/build/whitespace_file.txt</span> | |
1494 <span style="color: #33d6e5">@@ -42,4 +42,5 @@</span> when the fan was last clea
ned. | |
1495 There was an poignant pause. | |
1496 | |
1497 CHAPTER 3: | |
1498 <span style="color: #e42e16">-Hilariousness! This chapter is awesome!</span> | |
1499 <span style="color: #19c518">+</span><span style="color: #19c518">Mr. Usagi felt
that something wasn't right. Shortly after the Domo-Kun left he</span> | |
1500 <span style="color: #19c518">+</span><span style="color: #19c518">began feeling
sick.</span> | |
1501 </code></pre></div></div><p><div class="paragraph"> Much better</p></div><div cl
ass="listingblock"><div class="content"><pre><code><span style="font-weight: bol
d; color: #ffffff">$ git rebase --continue</span> | |
1502 Applying: beginning of chapter 3 | |
1503 <span style="font-weight: bold; color: #ffffff">$ git rebase-update</span> | |
1504 Fetching origin | |
1505 chap3 up-to-date | |
1506 <span style="font-weight: bold; color: #ffffff">$ gclient sync</span> | |
1507 ... truncated output ... | |
1508 <span style="font-weight: bold; color: #ffffff">$ git map</span> | |
1509 <span style="background-color: #492ee1"></span><span style="font-weight: bold; b
ackground-color: #492ee1">* </span><span style="font-weight: bold; color: #e42e1
6; background-color: #492ee1">1cb4f5b </span><span style="color: #19c518"> (</
span><span style="color: #33d6e5"></span><span style="font-weight: bold; color:
#33d6e5">chap3</span><span style="font-weight: bold"></span><span style="font-we
ight: bold"></span><span style="color: #19c518">) </span><span style="color: #e7
e71c">2014-04-10</span> ~ beginning of chapter 3 | |
1510 * <span style="font-weight: bold; color: #e42e16">59cdb73 </span><span sty
le="color: #19c518"> (</span><span style="color: #e42e16">origin/master</span><s
pan style="color: #19c518">, </span><span style="color: #e42e16">origin/HEAD</sp
an><span style="color: #19c518">) </span><span style="color: #e7e71c">2014-04-10
</span> ~ Refactor data interchange format.<span style="font-weight: bold"></spa
n><span style="font-weight: bold; color: #ffffff"> <(chap3)</span><span st
yle="font-weight: bold"></span><span style="font-weight: bold"></span> | |
1511 * <span style="font-weight: bold; color: #e42e16">34676a3 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Ens
ure FS is exited for all not-in-same-page navigations. | |
1512 * <span style="font-weight: bold; color: #e42e16">7d4784e </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Add
best chapter2 ever! | |
1513 * <span style="font-weight: bold; color: #e42e16">5d26fec </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fin
ish chapter 2 | |
1514 * <span style="font-weight: bold; color: #e42e16">df7fefb </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Rev
ert 255617, due to it not tracking use of the link doctor page properly. | |
1515 * <span style="font-weight: bold; color: #e42e16">4b39cda </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Fix
terrible typo. | |
1516 * <span style="font-weight: bold; color: #e42e16">248c5b6 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Tem
porarily CHECK(trial) in ChromeRenderProcessObserver::OnSetFieldTrialGroup. | |
1517 * <span style="font-weight: bold; color: #e42e16">8171df8 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Rem
ove AMD family check for the flapper crypto accelerator. | |
1518 * <span style="font-weight: bold; color: #e42e16">d6a30d2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Cha
nge the Pica load benchmark to listen for the polymer-ready event | |
1519 * <span style="font-weight: bold; color: #e42e16">beec6f4 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Mak
e ReflectorImpl use mailboxes | |
1520 * <span style="font-weight: bold; color: #e42e16">41290e0 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ don
't use glibc-specific execinfo.h on uclibc builds | |
1521 * <span style="font-weight: bold; color: #e42e16">a76fde7 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ [fs
p] Add requestUnmount() method together with the request manager. | |
1522 * <span style="font-weight: bold; color: #e42e16">9de7a71 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ lin
ux_aura: Use system configuration for middle clicking the titlebar. | |
1523 * <span style="font-weight: bold; color: #e42e16">073b0c2 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Con
tentView->ContentViewCore in ContentViewRenderView | |
1524 * <span style="font-weight: bold; color: #e42e16">2250f53 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ ozo
ne: evdev: Filter devices by path | |
1525 * <span style="font-weight: bold; color: #e42e16">33a7a74 </span><span sty
le="color: #19c518"></span> <span style="color: #e7e71c">2014-04-10</span> ~ Alw
ays output seccomp error messages to stderr | |
1526 <span style="font-weight: bold; color: #ffffff">$ git cl upload</span> | |
1527 ... truncated output ... | |
1528 </code></pre></div></div><p><div class="paragraph"></p></div> | |
1529 <div class="paragraph"><p>So there you have the basic flow. Note that you don
217;t <em>have</em> to do chromium | |
1530 development using these tools. Any git workflow is compatible, as long as | |
1531 <code>git cl upload</code> is able to upload good patches.</p></div> | |
1532 </div> | |
1533 </div> | |
1534 <div class="sect1"> | |
1535 <h2 id="_conclusion">CONCLUSION</h2> | |
1536 <div class="sectionbody"> | |
1537 <div class="paragraph"><p>Hopefully that gives you a good starting overview on C
hromium development using | |
1538 <em>depot_tools</em>. If you have questions which weren’t answered by this
tutorial or | |
1539 the man pages for the tools (see the index of all tools here: | |
1540 <a href="depot_tools.html">depot_tools(7)</a>), please feel free to ask.</p></di
v> | |
1541 </div> | |
1542 </div> | |
1543 <div class="sect1"> | |
1544 <h2 id="_glossary">GLOSSARY</h2> | |
1545 <div class="sectionbody"> | |
1546 <div class="dlist"><dl> | |
1547 <dt class="hdlist1"> | |
1548 CL | |
1549 </dt> | |
1550 <dd> | |
1551 <p> | |
1552 A <em>change-list</em>. This is a diff which you would like to commit to the | |
1553 codebase. | |
1554 </p> | |
1555 </dd> | |
1556 <dt class="hdlist1"> | |
1557 DEPS | |
1558 </dt> | |
1559 <dd> | |
1560 <p> | |
1561 A file in the chromium checkout which <code>gclient sync</code> uses to determ
ine what | |
1562 dependencies to pull in. This file also contains <em>hooks</em>. | |
1563 </p> | |
1564 </dd> | |
1565 <dt class="hdlist1"> | |
1566 LKGR | |
1567 </dt> | |
1568 <dd> | |
1569 <p> | |
1570 Last Known Good Revision. This is a <a href="git-tag.html">git-tag(1)</a> whic
h tracks the last | |
1571 version of <code>origin/master</code> which has passed the full set of testing
on the | |
1572 <a href="http://build.chromium.org">main Chromium waterfall</a>. | |
1573 </p> | |
1574 </dd> | |
1575 </dl></div> | |
1576 </div> | |
1577 </div> | |
1578 <div class="sect1"> | |
1579 <h2 id="_chromium_depot_tools">CHROMIUM DEPOT_TOOLS</h2> | |
1580 <div class="sectionbody"> | |
1581 <div class="paragraph"><p>Part of the chromium <a href="depot_tools.html">depot_
tools(7)</a> suite. These tools are meant to | |
1582 assist with the development of chromium and related projects. Download the tools | |
1583 from <a href="https://chromium.googlesource.com/chromium/tools/depot_tools.git">
here</a>.</p></div> | |
1584 </div> | |
1585 </div> | |
1586 </div> | |
1587 <div id="footnotes"><hr /></div> | |
1588 <div id="footer"> | |
1589 <div id="footer-text"> | |
1590 Last updated 2014-04-14 16:26:14 PDT | |
1591 </div> | |
1592 </div> | |
1593 </body> | |
1594 </html> | |
OLD | NEW |