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