我通常使用Tortoise SVN,但我一直在研究Mercurial,因为它是一个分布式版本控制系统.
我在两个系统中寻找的是一个工具,让我只选择一部分文件并提交它们.如果我现在想要这样做,我必须复制到文件的临时版本并仅保留我想要在当前版本中提交的更改,然后在提交后再次将临时版本复制到当前版本.这只是一个麻烦,程序应该能够为我做这件事.
我听说Git支持这个,如果这是正确的,请告诉我.
Mercurial可以使用记录扩展来完成此操作.
它会提示你每个文件和每个差异.例如:
% 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接口.
是的,git允许你这样做.该git add
命令有一个-p
(或--patch
)选项,允许您逐个查看您的更改,选择要进行的更改(您还可以优化黑客或在适当的位置编辑补丁).您还可以使用交互模式git-add(git add -i
)并使用"p"选项.
这是一个关于交互式添加的截屏视频,它还演示了补丁功能git add
.
查看TortoiseHG,它将进行大块选择,并允许您对不同的提交对一个文件进行不同的更改.
它甚至允许您对一些文件提交所有更改,并在一次提交中对其他文件进行部分更改.
http://tortoisehg.bitbucket.io/
我刚才问了一个类似的问题,得到的使用hgshelve扩展的答案就是我正在寻找的.
在进行提交之前,您可以将来自不同文件(或文件中的更改)的更改放在"架子"上,然后提交您想要的内容.然后,您可以取消搁置您未提交的更改并继续工作.
过去几天我一直在使用它并喜欢它.非常容易可视化和使用.