使用SVN,GIT和CVS进行多个并发更改

时间:2010-05-05 14:51:05

标签: svn git cvs

在工作中,我们正在使用SVN,CVS和GIT,因为有许多项目在不同时间启动。无论如何,发生的常见序列如下:

  1. 处理任务A,对项目进行更改
  2. 有新任务B,需要在项目上完成一些错误或功能,独立于任务A但可能会影响同一组文件
  3. 签入任务B
  4. 签入任务A
  5. 不幸的是,我此时所做的是两个维护每个项目的2个工作副本。所以我总是可以从干净的副本中处理任务B.你可以想象,这很浪费,并且不能很好地扩展(任务C,D,E等)

    对于每个版本控制系统,是否有命令可以帮助我执行以下操作:

    1. “保存”任务A,将工作副本还原到当前存储库
    2. 处理任务B,检入更改
    3. “还原”任务A更改回工作副本

3 个答案:

答案 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时,你也可以为它创建一个分支。

您在两个分支之间切换以处理一件事或另一件事。 (这很快,因为它只更新差异)

当一项任务完成后,您可以使用中继更改来更新它并将其合并回主干。

第二个任务完成后,您可以使用中继(现在包含其他任务)的更改来更新它,然后将其合并回来。