代码之家  ›  专栏  ›  技术社区  ›  RobbieGee

我可以使用SVN或Mercurial只提交部分代码吗?

  •  37
  • RobbieGee  · 技术社区  · 16 年前

    我通常使用Ortoise SVN,但我一直在研究Mercurial,因为它是一个分布式版本控制系统。

    6 回复  |  直到 10 年前
        1
  •  40
  •   Vadim Kotov First Zero    7 年前

    Mercurial可以用 record 扩大

    % 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...
    

    提交后,剩余的差异将被留下:

    % 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
    

    或者,您可能会发现使用MQ(Mercurial Queues)将存储库中的单个更改分离为补丁更容易。还有记录的MQ变体(qrecord)。

    crecord 扩展,它为hunk/line选择提供了一个curses接口。

    crecord screenshot

        2
  •  12
  •   Pat Notz    16 年前

    git add 命令有一个 -p (或 --patch )选项,允许您逐个检查所做的更改,选择要进行的阶段(您也可以细化这些更改,或者就地编辑修补程序)。您还可以使用交互模式添加git( git add -i

    这里有一个 screencast on interactive adding 它还演示了 git添加 .

        3
  •  8
  •   Vadim Kotov First Zero    7 年前

    检查一下TortoiseHG,它将进行hunk选择,并允许您将不同的更改提交到一个文件中。

    它甚至允许您在一次提交中提交对某些文件的所有更改以及对其他文件的部分更改。

    http://tortoisehg.bitbucket.io/

        4
  •  5
  •   Vadim Kotov First Zero    7 年前

    我问了一个问题 similar question 就在刚才,使用 hgshelve extension 这正是我要找的。

    过去几天我一直在用它,而且非常喜欢它。非常容易可视化和使用。

        5
  •  2
  •   Oly    7 年前

    --interactive (或 -i commit 命令,该命令立即启用此功能。

    跑步

    > hg commit -i
    

    开始交互式会话,该会话允许检查、编辑和记录单个更改以创建提交。

    这与 --patch 未来的选择 git add git commit 命令。

        6
  •  0
  •   craigb    16 年前

    我建议不要这样工作。

    如果您必须更改集合,集合A已准备好签入,集合B尚未准备好,您如何确保仅签入集合A不会破坏您的构建/测试?您可能会遗漏一些行,忘记其他文件中的行,或者没有意识到a对B的依赖性会破坏其他构建。

    或其他 在你们队。如果你正在部分提交一个文件,那么你将极大地增加你在不知情的情况下破坏他人构建的机会,直到有不愉快的同事敲你的门。