2008-09-29 82 views
37

我通常使用Tortoise SVN,但我一直在寻找Mercurial,因为它是一个分布式版本控制系统。我可以仅使用SVN或Mercurial提交部分代码吗?

我在这两个系统中寻找的是一种让我只挑选文件的一部分并提交它们的工具。如果我现在要这样做,我必须复制到该文件的临时版本,并且只保留我想要在当前版本中提交的更改,然后在提交后再次将临时版本复制到当前版本。这只是一个麻烦,程序应该能够为我做到这一点。

我听说Git支持这个,请让我知道这是否正确。

+1

为SVN开发这样的工具应该相当容易。我想知道为什么没有人做到这一点。 – 2010-06-16 11:51:45

+0

@PavelRadzivilovsky补丁欢迎。我的意思是你可以写一个补丁并将它发送到dev @邮件列表。 – bahrep 2017-09-08 06:32:42

+0

现在有一个内置的“交互式”提交实用程序,用于Mercurial的开箱即用。请参阅下面的答案。 – Oly 2017-09-18 14:10:56

回答

38

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(水银队列)给个体的变化在不同的资料库到补丁。还有一个记录的MQ变体(qrecord)。

更新:也尝试crecord扩展名,它为hunk /行选择提供curses接口。

crecord screenshot

+1

可惜没有一个GUI工具。用GitX做这件事真是太棒了。 – mxcl 2010-02-10 17:20:04

+0

阿门。 GitX是*我使用Git的原因;希望Murky能够胜任。 (不幸的是,我用开源项目来解决它太多了,尽管我对GitX和Murky都有所贡献:-) – 2010-02-11 00:16:08

+2

有一个GUI工具:Tortoisehg支持大块选择。 – Hauge 2010-03-01 16:55:16

0

我建议不要这样工作。

如果您必须进行一系列更改,请设置准备检入的A并设置尚未准备好的B,如何确保仅检查集A不会破坏您的构建/测试?您可能会错过某些行,忘记其他文件中的行,或者没有意识到A在B上为其他人打破构建的依赖关系。

你的提交应该是谨慎的原子更改,不会破坏你的团队或其他的构建。如果你部分地犯了一个文件,那么你会大大增加你在不知情的情况下为别人打破构建的机会,除非你有一个不愉快的同事敲门。

最大的问题是,你为什么觉得需要这样工作?

5

刚才我问了一个similar question,结果使用hgshelve extension的答案正是我所期待的。

在您执行提交之前,您可以在“货架”上放入来自不同文件(或文件中的更改块)的更改,然后提交所需的内容。然后,您可以取消未提交的更改并继续工作。

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

12

是的,git允许你这样做。 git add命令有一个-p(或--patch)选项,允许您逐个检查您所做的更改,选择要分阶段执行的操作(还可以优化区块或编辑补丁)。您也可以使用交互模式进行混搭(git add -i)并使用“p”选项。

这是screencast on interactive adding,它也演示了git add的补丁功能。

7

看看TortoiseHG,它会做大块选择,让你对不同的提交对一个文件做不同的修改。

它甚至可以让您对一些文件进行所有更改,并在一次提交中对其他文件进行部分更改。

http://tortoisehg.bitbucket.io/

1

水银现在提供了一个选项--interactive(或-i)到commit命令,从而使该功能开箱的。

这可以直接从命令行运行,所以如果你是命令行爱好者,它是完美的!

运行

> hg commit -i 

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

这与git addgit commit命令的--patch--interactive选项的行为非常相似。

相关问题