我的工作流程通常涉及我对文件进行多项更改,每次更改都属于项目中自己的概念变更单元(= commit)。
我希望能够做的是添加某些差异(整个文件,或者只是文件的某些行)到挂起的提交(可能必须被命名)并且有多个待处理的提交同时“活跃”。
然后,当所有文件都完成与特定挂起提交相关的所有更改时,我可以提交命名提交!
有哪些想法哪个VCS适合这个?
答案 0 :(得分:6)
在svn中,您可以定义changelists,然后只提交特定更改列表中的文件。
Git更进一步,允许您通过交互式选择git add -p文件中已更改的块来记录补丁。
虽然很受欢迎,但这些功能与最佳做法相悖。您无法以这种方式正确测试更改。一切都可以在您的工作副本中工作,但只提交部分更改可能会破坏构建。使用feature branches更加安全,任何现代版本控制系统都支持此功能。
还有Mercurial ShelveExtension和git-stash,它允许您以修补程序块的粒度搁置所选更改以供稍后提交。这种工作方式确实允许您在提交前正确测试。
答案 1 :(得分:2)
原始请求听起来很像“樱桃挑选”:手动选择“差异”的片段以包含在新提交中。至少Git和Darcs支持这一点。对于emacs + git,有gitsum,我非常喜欢。
答案 2 :(得分:1)
在bzr中,您可以使用shelve / unshelve命令从文件中获取一些更改,然后返回,或使用loom插件轻松管理相关补丁集。但这些都不会解决您的原始请求,我怀疑任何VCS都可以这样做。
答案 3 :(得分:0)
要确保每个单独更改的提交都会导致可构建的系统,这将非常困难。
我强烈建议您一次做一件事并分别提交每个问题。
答案 4 :(得分:0)
内容警告:我的印象,仅基于熟人:
如果您需要同时进行微观管理,但在某种意义上无关联的更改,那么您可能需要调查darcs,与svn,git或mercurial等系统相比,它具有相反的重点。
在darc中,补丁是关键元素,给定分支的状态实际上只是一组补丁的总和。这个模型可能适合你想要做的事情,但很明显@ wcoenen关于最佳实践的警告。对于每组补丁,您需要确保构建(无论它可能包含什么)不会被破坏。
顺便说一下,你是Eoghan M ......我想你是谁?答案 5 :(得分:-1)
Subversion客户端(> = 1.5)包含更改列表的概念:与所选名称关联的一组文件。
在处理同一工作副本中的多个不同文件集时,这尤其有用。 Subversion不是必须记住每个集合中的每个文件,而是允许您将更改列表与每组文件相关联。大多数以一组文件为目标的命令现在也会接受--changelist选项,该选项根据更改列表的成员过滤这些目标。可以使用新的changelist子命令编辑变更列表成员资格。