Can I commit only parts of my code using SVN or Mercurial?

前端 未结 6 1538
梦谈多话
梦谈多话 2021-02-01 02:11

I use Tortoise SVN usuallly, but I have been looking into Mercurial since it is a distributed revision control system.

What I am looking for, in both systems, is a tool

6条回答
  •  Happy的楠姐
    2021-02-01 02:58

    Mercurial can do this with the record extension.

    It'll prompt you for each file and each diff hunk. For example:

    % hg record
    diff --git a/prelim.tex b/prelim.tex
    2 hunks, 4 lines changed
    examine changes to 'prelim.tex'? [Ynsfdaq?]  
    @@ -12,7 +12,7 @@
     \setmonofont[Scale=0.88]{Consolas}
     % missing from xunicode.sty
     \DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
    -\else
    +\else foo
     \usepackage[pdftex]{graphicx}
     \fi
    
    record this change to 'prelim.tex'? [Ynsfdaq?]  
    @@ -1281,3 +1281,5 @@
     %% Local variables:
     %% mode: latex
     %% End:
    +
    +foo
    \ No newline at end of file
    record this change to 'prelim.tex'? [Ynsfdaq?]  n
    Waiting for Emacs...
    

    After the commit, the remaining diff will be left behind:

    % hg di
    diff --git a/prelim.tex b/prelim.tex
    --- a/prelim.tex
    +++ b/prelim.tex
    @@ -1281,3 +1281,5 @@
     %% Local variables:
     %% mode: latex
     %% End:
    +
    +foo
    \ No newline at end of file
    

    Alternatively, you may find it easier to use MQ (Mercurial Queues) to separate the individual changes in your repository into patches. There is a MQ variant of record (qrecord), too.

    Update: Also try the crecord extension, which provides a curses interface to hunk/line selection.

    crecord screenshot

提交回复
热议问题