使用版本控制需要多少开销时间和学习时间?

时间:2011-07-24 01:37:19

标签: git svn version-control

背景:我们是一家小型网络开发公司。我们有5个程序员,可以生成70%的简单PHP网站(有一些MySQL用于新闻/产品目录/等),30%的时间用于大型项目(通常是定制的ERP系统)。我们在办公室有一个中央服务器,在所有用户(和服务器)中使用Linux,只需安装服务器并在我们需要工作的目录(网站项目)中工作即可。这目前工作正常。有两件事让我考虑版本控制:

  • 许多网站,人员等pretty strong case
  • 当公司发展并且有几个人同时在一个项目上工作时,未来可能会出现潜在问题。

然而,尽管在提及不使用版本控制的理由时人们看到被敲定了,但由于这些原因我有一定的犹豫:

  • 我们做了很多改变,但它们通常都是非常小的变化。
  • 我们几乎从未想过要扭转变化。
  • 我们经常备份,可以在需要“先前”
  • 的情况下使用
  • 几乎没有人同时处理相同的代码。一个项目通常在人与人之间“流动”,因为不同的人负责不同的开发阶段(HTML / CSS / PHP / MySQL)
  • 当项目更复杂时,我们通常会将其分配给一个人。
  • 我们现在非常淹没工作

所以我看到版本控制的好处,但我只关心开发网站时所需的开销。我以前从未使用过这样的系统。我觉得现在事情变得如此简单快捷,以至于我们在使用VC时会浪费时间。如果您想在一天内对20个不同的网站进行20次小的更改,则可以加入,签出等。至少,这就是我的想法。所以我的问题是:我们是否应该提前转换到VC,或者我们现在不应该浪费时间吗?这个很难学?最后,GIT比SVN显着更耗时(学习和使用)? (我喜欢GIT的非集中方面,但这不是必需的)。

注意:我们都使用常规文本编辑器(如VIM或jEdit)进行编码。

4 个答案:

答案 0 :(得分:6)

根据您所描述的方案,版本控制应该更简单才能使用 - 因此开销应该非常低。例如,根据您的描述,您基本上要做的就是(Git的例子):

  1. 开始工作:git pull
  2. 做好工作(通常是你已经做过的事)
  3. git add .(在顶级目录中)
  4. git commit -m "A quick message saying what you did"
  5. git push
  6. 就是这样。

答案 1 :(得分:1)

使用github或类似提供商等托管解决方案,您可以在大约30分钟内启动并运行,并能够检查和输出代码。具备更高级功能和VCS使用的能力将随着时间的推移而增加。随着您对VCS的熟悉和熟悉,您甚至可以开始使用版本控制来帮助更快地追踪错误(git bisect等......但现在不用担心)

答案 2 :(得分:1)

即使您决定使用subversion之外的其他内容进行版本控制,也建议您阅读the first three chapters of the subversion book。所有流行的版本控制系统的命令在工具之间并没有根本不同(即使在分发系统的情况下),它将巩固从10000英尺视图和1英尺使用版本控制意味着什么的日常细节。图。

很快就会发现使用版本控制不会给开发过程增加相当多的时间。办理大型登机手续约需20秒,小型办理登机手续需要2至3秒。比试图研究档案的20分钟便宜得多,发现模块中是否有变化(假设你有很容易的每个“构建”的档案。我知道你认为这样的事情永远不需要发生,但如果你它必须做一次,它可能会及时收回成本。

此外,如果没有版本控制,您如何知道您最近的更改不仅仅是重新引入六个月前所做更改所删除的问题?记忆是一个很好的工具,但它远​​非绝对可靠。

答案 3 :(得分:1)

使用版本控制,应该没有问题。

你这么说:

  

我们几乎从未想过要改变变化。

按照这种逻辑,没有人应该系安全带,因为几乎每个人每天都在车上安全驾驶。

在某些时候,您需要回到旧的变化,并且让SCM是正确执行此操作的唯一方法。将SCM视为备用降落伞,您希望自己永远不需要它,但当出现问题时,它会更安全


你还说使用SCM的开销太大了。我不知道你怎么能支持这种说法。对于初学者来说,设置和使用基本git的时间应该只需要几个小时,最多。在您弄明白之后,它可能会增加几秒钟或1或2分钟的额外时间。就是这样。

您可以做的一件简单事情就是指示每个开发人员安装cron命令,每隔1小时左右登记一次本地存储库并推送到您的服务器。现在我不推荐这个,但是通过这样的设置,你不会真的每个人都要再次考虑SCM,然后当你需要它时,它会在那里。

其次,一旦你开始使用像git这样的SCM,你会发现它成为你日常活动中不可或缺的一部分。不使用SCM的人可能无法理解您缺少的功能:

  • 在代码分支之间即时切换
  • 撤消对任何保存点的临时更改,并稍后重新应用
  • 自动合并多个开发人员的更改
  • 记录谁是最后一个更改一行的人,或谁是原作者
  • 暂时记录代码中的更改时间/内容
  • 能够同步错误和代码提交。
  • 等...

我希望这能说服你!祝你好运。