版本控制

时间:2011-01-29 08:09:28

标签: version-control

首先,抱歉,因为我的英语和解释不好。这是我收到一些评论后的问题的编辑版本,我意识到是什么让你感到困惑。

我正在开展的项目大约有10人,每个人都会在项目中实施一些“工作”。

  • 我们共享20个模型文件(文本文件)
  • 当人们“工作”时,他们必须直接进入模型文件并在上面的20个文本文件中添加/删除/编辑一些行。

假设:

  • A已实施工作号。 1,4,6和10.
  • B已实施工作号。 2,3,7和9。
  • ...

AB实施之前已实施(4)(7)。 在文件X中,由(7)改变的某些值/行被(7)覆盖。

后来当我们进行节能评估并发现(4)实际上根本没有节省能源时,我们决定采取(4)。

所以问题是,如果我们有任何版本控制可以采取(4)(由A实现)out而不触及由(7)做出的任何被覆盖的值/行(由B实现)。
换句话说,我想删除A对工作号(4)所做的所有更改。 A完成的工作1,6,10仍在模型文件中。

目前我们正在使用RCS ......但我不知道RCS能否做到这一点以及如何做到这一点? 我在考虑GIT和SVN。我认为SVN更合适,因为项目中的所有数据都放在1​​个位置(1个文件夹)。我们的服务器是Linux Red Hat。

如果您遇到此问题,请分享。

再次抱歉,谢谢你的时间。

3 个答案:

答案 0 :(得分:2)

对于配置,最好是版本:

  • 仅包含变量的模板配置文件
  • 每个模块值分别
  • 一个脚本,能够识别正在运行的模块,并用实际值替换模板文件中的变量

那样:

  • 实际配置文件(具有模块使用值的文件)永远不会被版本化(但总是生成)。
  • 它处理任何模块组织/依赖关系(因为,就像注释中提到的Jon一样),如果您有一个由多个模块或同一组文件修改的公共文件,则不是很清楚(模块)有几个版本。

如果您无法生成同时修改的文件,那么branches are the right solution,这就是为什么SVN或任何DVCS(Git,Mercurial,...)
这会产生合并的开销,以便将一些修改从一个分支报告给另一个分支。


您想要的选择性合并类型是“负合并”(您可以撤消某些更改,而不是其他更改:也称为subtractive merge

Git通过"rebase --interactive"处理没有问题的地方,你重播提交(你甚至可以修改/更改其中一个提交的提交)。
如果您不想重写过去提交的历史记录,您还可以选择git revert

我不知道RCS将如何处理,除非您通过手动将当前版本与A完成的先前版本进行比较来进行新修订,以便删除正确的行。

答案 1 :(得分:0)

一般来说,使用版本控制时的方法是:

  • 你有一个包含稳定版代码的主干
  • 你有问题 - >你从主干创建一个分支
  • 在您解决问题时,您将更改从主干到分支的更改尽可能保持与稳定版本的关系 - >通过这种方式,您会立即注意到稳定的更改不能与您的代码一起使用;)
  • 一旦问题得到修复/测试(!),您就将分支合并到主干

请注意:

  • 如果更多开发人员正在更改同一行代码,则会出现冲突 - >这种情况发生了,必须手动处理
  • 还可以恢复提交

答案 2 :(得分:0)

要删除带有SVN的版本(我假设它与git类似),您可以在工作副本上使用以下命令行:

svn merge -c -4 .

这会对版本4的更改产生负面影响。之后,您可以检查更改并将其提交回存储库。