Mercurial > hgbook
comparison en/ch04-daily.xml @ 775:29f0f79cf614
Update paragraph IDs
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Thu, 16 Apr 2009 23:46:45 -0700 |
parents | 3b640272a966 |
children | 1a0a78e197c3 |
comparison
equal
deleted
inserted
replaced
774:e6c99cbd0abd | 775:29f0f79cf614 |
---|---|
355 cp</command> alias if you prefer). We must supply two or | 355 cp</command> alias if you prefer). We must supply two or |
356 more arguments, of which the last is treated as the | 356 more arguments, of which the last is treated as the |
357 <emphasis>destination</emphasis>, and all others are | 357 <emphasis>destination</emphasis>, and all others are |
358 <emphasis>sources</emphasis>.</para> | 358 <emphasis>sources</emphasis>.</para> |
359 | 359 |
360 <para>If you pass <command role="hg-cmd">hg copy</command> a | 360 <para id="x_685">If you pass <command role="hg-cmd">hg copy</command> a |
361 single file as the source, and the destination does not exist, | 361 single file as the source, and the destination does not exist, |
362 it creates a new file with that name.</para> | 362 it creates a new file with that name.</para> |
363 | 363 |
364 &interaction.daily.copy.simple; | 364 &interaction.daily.copy.simple; |
365 | 365 |
428 respects, the behavior of the <command role="hg-cmd">hg | 428 respects, the behavior of the <command role="hg-cmd">hg |
429 rename</command> command, and the options it accepts, are | 429 rename</command> command, and the options it accepts, are |
430 similar to the <command role="hg-cmd">hg copy</command> | 430 similar to the <command role="hg-cmd">hg copy</command> |
431 command.</para> | 431 command.</para> |
432 | 432 |
433 <para>If you're familiar with the Unix command line, you'll be | 433 <para id="x_686">If you're familiar with the Unix command line, you'll be |
434 glad to know that <command role="hg-cmd">hg rename</command> | 434 glad to know that <command role="hg-cmd">hg rename</command> |
435 command can be invoked as <command role="hg-cmd">hg | 435 command can be invoked as <command role="hg-cmd">hg |
436 mv</command>.</para> | 436 mv</command>.</para> |
437 | 437 |
438 <sect2> | 438 <sect2> |
548 </sect1> | 548 </sect1> |
549 | 549 |
550 <sect1> | 550 <sect1> |
551 <title>Dealing with tricky merges</title> | 551 <title>Dealing with tricky merges</title> |
552 | 552 |
553 <para>In a complicated or large project, it's not unusual for a | 553 <para id="x_687">In a complicated or large project, it's not unusual for a |
554 merge of two changesets to result in some headaches. Suppose | 554 merge of two changesets to result in some headaches. Suppose |
555 there's a big source file that's been extensively edited by each | 555 there's a big source file that's been extensively edited by each |
556 side of a merge: this is almost inevitably going to result in | 556 side of a merge: this is almost inevitably going to result in |
557 conflicts, some of which can take a few tries to sort | 557 conflicts, some of which can take a few tries to sort |
558 out.</para> | 558 out.</para> |
559 | 559 |
560 <para>Let's develop a simple case of this and see how to deal with | 560 <para id="x_688">Let's develop a simple case of this and see how to deal with |
561 it. We'll start off with a repository containing one file, and | 561 it. We'll start off with a repository containing one file, and |
562 clone it twice.</para> | 562 clone it twice.</para> |
563 | 563 |
564 &interaction.ch04-resolve.init; | 564 &interaction.ch04-resolve.init; |
565 | 565 |
566 <para>In one clone, we'll modify the file in one way.</para> | 566 <para id="x_689">In one clone, we'll modify the file in one way.</para> |
567 | 567 |
568 &interaction.ch04-resolve.left; | 568 &interaction.ch04-resolve.left; |
569 | 569 |
570 <para>In another, we'll modify the file differently.</para> | 570 <para id="x_68a">In another, we'll modify the file differently.</para> |
571 | 571 |
572 &interaction.ch04-resolve.right; | 572 &interaction.ch04-resolve.right; |
573 | 573 |
574 <para>Next, we'll pull each set of changes into our original | 574 <para id="x_68b">Next, we'll pull each set of changes into our original |
575 repo.</para> | 575 repo.</para> |
576 | 576 |
577 &interaction.ch04-resolve.pull; | 577 &interaction.ch04-resolve.pull; |
578 | 578 |
579 <para>We expect our repository to now contain two heads.</para> | 579 <para id="x_68c">We expect our repository to now contain two heads.</para> |
580 | 580 |
581 &interaction.ch04-resolve.heads; | 581 &interaction.ch04-resolve.heads; |
582 | 582 |
583 <para>Normally, if we run <command role="hg-cmd">hg | 583 <para id="x_68d">Normally, if we run <command role="hg-cmd">hg |
584 merge</command> at this point, it will drop us into a GUI that | 584 merge</command> at this point, it will drop us into a GUI that |
585 will let us manually resolve the conflicting edits to | 585 will let us manually resolve the conflicting edits to |
586 <filename>myfile.txt</filename>. However, to simplify things | 586 <filename>myfile.txt</filename>. However, to simplify things |
587 for presentation here, we'd like the merge to fail immediately | 587 for presentation here, we'd like the merge to fail immediately |
588 instead. Here's one way we can do so.</para> | 588 instead. Here's one way we can do so.</para> |
589 | 589 |
590 &interaction.ch04-resolve.export; | 590 &interaction.ch04-resolve.export; |
591 | 591 |
592 <para>We've told Mercurial's merge machinery to run the command | 592 <para id="x_68e">We've told Mercurial's merge machinery to run the command |
593 <command>false</command> (which, as we desire, fails | 593 <command>false</command> (which, as we desire, fails |
594 immediately) if it detects a merge that it can't sort out | 594 immediately) if it detects a merge that it can't sort out |
595 automatically.</para> | 595 automatically.</para> |
596 | 596 |
597 <para>If we now fire up <command role="hg-cmd">hg | 597 <para id="x_68f">If we now fire up <command role="hg-cmd">hg |
598 merge</command>, it should grind to a halt and report a | 598 merge</command>, it should grind to a halt and report a |
599 failure.</para> | 599 failure.</para> |
600 | 600 |
601 &interaction.ch04-resolve.merge; | 601 &interaction.ch04-resolve.merge; |
602 | 602 |
603 <para>Even if we don't notice that the merge failed, Mercurial | 603 <para id="x_690">Even if we don't notice that the merge failed, Mercurial |
604 will prevent us from accidentally committing the result of a | 604 will prevent us from accidentally committing the result of a |
605 failed merge.</para> | 605 failed merge.</para> |
606 | 606 |
607 &interaction.ch04-resolve.cifail; | 607 &interaction.ch04-resolve.cifail; |
608 | 608 |
609 <para>When <command role="hg-cmd">hg commit</command> fails in | 609 <para id="x_691">When <command role="hg-cmd">hg commit</command> fails in |
610 this case, it suggests that we use the unfamiliar <command | 610 this case, it suggests that we use the unfamiliar <command |
611 role="hg-cmd">hg resolve</command> command. As usual, | 611 role="hg-cmd">hg resolve</command> command. As usual, |
612 <command role="hg-cmd">hg help resolve</command> will print a | 612 <command role="hg-cmd">hg help resolve</command> will print a |
613 helpful synopsis.</para> | 613 helpful synopsis.</para> |
614 | 614 |
615 <sect2> | 615 <sect2> |
616 <title>File resolution states</title> | 616 <title>File resolution states</title> |
617 | 617 |
618 <para>When a merge occurs, most files will usually remain | 618 <para id="x_692">When a merge occurs, most files will usually remain |
619 unmodified. For each file where Mercurial has to do | 619 unmodified. For each file where Mercurial has to do |
620 something, it tracks the state of the file.</para> | 620 something, it tracks the state of the file.</para> |
621 | 621 |
622 <itemizedlist> | 622 <itemizedlist> |
623 <listitem> | 623 <listitem> |
624 <para>A <emphasis>resolved</emphasis> file has been | 624 <para id="x_693">A <emphasis>resolved</emphasis> file has been |
625 successfully merged, either automatically by Mercurial or | 625 successfully merged, either automatically by Mercurial or |
626 manually with human intervention.</para> | 626 manually with human intervention.</para> |
627 </listitem> | 627 </listitem> |
628 <listitem> | 628 <listitem> |
629 <para>An <emphasis>unresolved</emphasis> file was not merged | 629 <para id="x_694">An <emphasis>unresolved</emphasis> file was not merged |
630 successfully, and needs more attention.</para> | 630 successfully, and needs more attention.</para> |
631 </listitem> | 631 </listitem> |
632 </itemizedlist> | 632 </itemizedlist> |
633 | 633 |
634 <para>If Mercurial sees <emphasis>any</emphasis> file in the | 634 <para id="x_695">If Mercurial sees <emphasis>any</emphasis> file in the |
635 unresolved state after a merge, it considers the merge to have | 635 unresolved state after a merge, it considers the merge to have |
636 failed. Fortunately, we do not need to restart the entire | 636 failed. Fortunately, we do not need to restart the entire |
637 merge from scratch.</para> | 637 merge from scratch.</para> |
638 | 638 |
639 <para>The <option role="hg-opt-resolve">--list</option> or | 639 <para id="x_696">The <option role="hg-opt-resolve">--list</option> or |
640 <option role="hg-opt-resolve">-l</option> option to <command | 640 <option role="hg-opt-resolve">-l</option> option to <command |
641 role="hg-cmd">hg resolve</command> prints out the state of | 641 role="hg-cmd">hg resolve</command> prints out the state of |
642 each merged file.</para> | 642 each merged file.</para> |
643 | 643 |
644 &interaction.ch04-resolve.list; | 644 &interaction.ch04-resolve.list; |
645 | 645 |
646 <para>In the output from <command role="hg-cmd">hg | 646 <para id="x_697">In the output from <command role="hg-cmd">hg |
647 resolve</command>, a resolved file is marked with | 647 resolve</command>, a resolved file is marked with |
648 <literal>R</literal>, while an unresolved file is marked with | 648 <literal>R</literal>, while an unresolved file is marked with |
649 <literal>U</literal>. If any files are listed with | 649 <literal>U</literal>. If any files are listed with |
650 <literal>U</literal>, we know that an attempt to commit the | 650 <literal>U</literal>, we know that an attempt to commit the |
651 results of the merge will fail.</para> | 651 results of the merge will fail.</para> |
652 </sect2> | 652 </sect2> |
653 | 653 |
654 <sect2> | 654 <sect2> |
655 <title>Resolving a file merge</title> | 655 <title>Resolving a file merge</title> |
656 | 656 |
657 <para>We have several options to move a file from the unresolved | 657 <para id="x_698">We have several options to move a file from the unresolved |
658 into the resolved state. By far the most common is to rerun | 658 into the resolved state. By far the most common is to rerun |
659 <command role="hg-cmd">hg resolve</command>. If we pass the | 659 <command role="hg-cmd">hg resolve</command>. If we pass the |
660 names of individual files or directories, it will retry the | 660 names of individual files or directories, it will retry the |
661 merges of any unresolved files present in those locations. We | 661 merges of any unresolved files present in those locations. We |
662 can also pass the <option role="hg-opt-resolve">--all</option> | 662 can also pass the <option role="hg-opt-resolve">--all</option> |
663 or <option role="hg-opt-resolve">-a</option> option, which | 663 or <option role="hg-opt-resolve">-a</option> option, which |
664 will retry the merges of <emphasis>all</emphasis> unresolved | 664 will retry the merges of <emphasis>all</emphasis> unresolved |
665 files.</para> | 665 files.</para> |
666 | 666 |
667 <para>Mercurial also lets us modify the resolution state of a | 667 <para id="x_699">Mercurial also lets us modify the resolution state of a |
668 file directly. We can manually mark a file as resolved using | 668 file directly. We can manually mark a file as resolved using |
669 the <option role="hg-opt-resolve">--mark</option> option, or | 669 the <option role="hg-opt-resolve">--mark</option> option, or |
670 as unresolved using the <option | 670 as unresolved using the <option |
671 role="hg-opt-resolve">--unmark</option> option. This allows | 671 role="hg-opt-resolve">--unmark</option> option. This allows |
672 us to clean up a particularly messy merge by hand, and to keep | 672 us to clean up a particularly messy merge by hand, and to keep |