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

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

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

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

Mercurial可以用logging扩展名来做到这一点。

它会提示你为每个文件和每个差异大块。 例如:

 % 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)将存储库中的单个更改分隔成多个修补程序更为简单。 logging(qrecord)也有一个MQ变体。

更新:也可以尝试crecord扩展,它提供了一个curses接口到hunk / lineselect。

crecord截图

是的,Git允许你这样做。 git add命令有一个-p (或--patch )选项,允许你--patch检查你的改变,select哪个阶段(你也可以改进这个区块,或者编辑补丁)。 你也可以使用交互模式来git-add( git add -i )并使用“p”选项。

这是一个交互式添加屏幕录像,它也演示了git add的补丁function。

检查出TortoiseHG,这将做大块select,让你不同的承诺提交到不同的文件更改。

它甚至可以让你在一个提交中对所有文件进行修改,并对其他文件进行部分修改。

http://tortoisehg.bitbucket.io/

刚才我问了一个类似的问题 ,使用hgshelve扩展的结果正是我所要找的。

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

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

Mercurial现在向commit命令提供了一个选项--interactive (或-i ),它可以立即启用此function。

这直接从命令行工作,所以如果你是一个命令行爱好者是完美的!

运行

 > hg commit -i 

开始一个交互式会话,允许检查,编辑和logging个人变化创build一个提交。

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

我会build议不要这样工作。

如果你必须做一系列的修改,设置A就绪,然后设置B还没有准备好,你怎么确定只有在A中检查不会破坏你的构build/testing呢? 您可能会错过某些行,忘记其他文件中的行,或者没有意识到A对B打破了其他构build的依赖关系。

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

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