在工作中,我们正在使用SVN,CVS和GIT,因为有许多项目在不同时间启动。无论如何,发生的常见序列如下:
不幸的是,我此时所做的是两个维护每个项目的2个工作副本。所以我总是可以从干净的副本中处理任务B.你可以想象,这很浪费,并且不能很好地扩展(任务C,D,E等)
对于每个版本控制系统,是否有命令可以帮助我执行以下操作:
答案 0 :(得分:2)
仅限Git
Git鼓励您使用分支机构进行此类工作流程。
分支在git中非常便宜,所以你应该广泛使用它们。你所问的被称为“主题分支”,它们只不过是一个普通的分支,而是专门用于给定的主题(而不是开发状态)。
使用git,您应该执行以下操作:
$ git clone ...
$ git branch
* master
$ git checkout -b taskA # Start working on task A
$ git branch
master
* taskA
$ <changes on task A>
$ git commit # This "saves" the work done on task A
$ git checkout master # Revert to the last stable state
$ git checkout -b taskB # Start working on task B
$ git branch
master
taskA
* taskB
$ <changes on task B>
$ git commit # "Save" the changes on task B
$ git checkout master # To revert to the last stable state
$ git checkout taskA # To continue working on task A
这将创建一个历史记录,代表您与分支的不同“工作区”:
a -> b -> c # master
\
-> d -> e # Topic A
\
-> f -> g # Topic B <- HEAD
$ git branch
master
taskA
* taskB
获得此历史记录后,您可以将更改合并回master(稳定分支),然后将主分支推送到中央存储库。
此方案非常有用,因为您可以在任何主题分支上工作而无需多个工作区,并且您可以在任何给定时间在任何给定主题上工作,始终保留您的更改历史记录。
您可以对不同分支中的相同文件进行更改,将分支合并到另一个分支时,git将尝试合并对文件所做的更改。如果由于您在两个不同的地方更改了完全相同的行而发生冲突,那么git会通知您解决该特定冲突。
此外,您可以查看git stash以了解如何保存当前无法提交的时间更改。
从Branching Workflows阅读Pro Git章节以获取更多信息。
答案 1 :(得分:1)
svn和cvs没有任何简单的内置方法可以自行创建和管理补丁文件。
git使用quilt来实现这一点(类似于mercurials mq扩展),它非常有用
答案 2 :(得分:0)
基于SVN。
您将从任务A的主干创建一个分支。
然后当你得到任务B时,你也可以为它创建一个分支。
您在两个分支之间切换以处理一件事或另一件事。 (这很快,因为它只更新差异)
当一项任务完成后,您可以使用中继更改来更新它并将其合并回主干。
第二个任务完成后,您可以使用中继(现在包含其他任务)的更改来更新它,然后将其合并回来。