我用龟SVN通,但我已经找到善变的,因为它是一个分布式修改控制系统。

我正在寻找,在这两种系统,是一个工具,让我选择只有部分的一个文件,并提交他们。如果我现在要做到这一点,我有以复制到一个临时版本的文件,只保留改变我的想要承诺在目前的版本,然后再复制的临时版本的当前版本之后再次犯。它只是这样一个麻烦和程序应该能够做到这对我来说。

我听说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扩展 正是我寻找的。

你做之前提交,你可以把变化是从不同的文件(或帅哥的变化在一个文件)的"架子",然后提交你想要的东西。然后你可以取消搁置的变化,你没有承诺和继续工作。

我已经使用了过去几天和喜欢它了。很容易想象和使用。

Mercurial现在为 commit 命令提供了一个选项 - interactive (或 -i ),它可以直接启用此功能。框。

这直接来自命令行,所以如果你是一个命令行发烧友,它是完美的!

运行

> hg commit -i

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

此行为与 git add git commit - patch - interactive 选项非常相似代码>命令。

我建议不要这样工作。

如果您需要进行一组更改,请设置A已准备好进行检查并设置尚未准备好的B,您如何确定只检查A组不会破坏您的构建/测试?你可能会错过一些行,忘记不同文件中的行,或者没有意识到A对B的依赖性打破了其他人的构建。

您的提交应该是谨慎的原子更改,不会破坏您团队中或其他的构建。如果你正在部分提交一个文件,你就会大大增加你为其他人打破构建的机会而不知道它,直到你有一些不快乐的同事敲门。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top