如何让我的同事不要鄙视SVN?

时间:2008-09-26 14:49:15

标签: svn version-control

我的许多同事在1-5人的小组中使用SVN,部分工作在特定项目上。其中一半是没有经验的学生。事实上,我们不是真正的软件开发人员,具有一年的经验。他们中的大多数使用Eclipse和subclipse来读取和写入他们对SVN存储库的贡献。

他们中的一些人有以下不同之处的问题:

  • 退房(与更新和合并相混淆)
  • 提交(与更新混淆)
  • 更新(与提交和签出相混淆)
  • 合并(最难的。合并是什么?我必须将我的代码合并到SVN中吗?)

他们担心如果他们按错了按钮,SVN可能会杀死他们的工作(他们不称之为工作分支)。

在将一些任意库依赖项添加到其java项目之后,他们将eclipse .project文件提交到存储库。其他同事从这些comitts中得到编译错误,发现很难解决这些错误。

总的来说,他们说:我想在没有SVN的情况下工作,我不喜欢它。这太复杂了。

是否有像“SVN for kids”这样的电子学习项目?我怎样才能让它们像版本控制一样?

21 个答案:

答案 0 :(得分:17)

根据我的经验,为什么这么多人“害怕”或不喜欢版本控制的一个主要原因是因为他们不理解基本概念以及系统如何工作。不幸的是,对于许多有经验的开发人员来说,这也是如此。我知道多年来一直使用CVS和Subversion的人,但他们从不创建分支或标签,因为他们不了解它们是如何工作的,因此将它们视为“复杂”或“不必要”。

我认为您的同事必须基本了解版本控制的目的,使用它的原因以及执行此操作所涉及的工作流程。就个人而言,我认为Subversion book的前两章对所涉及的概念和一般版本控制系统背后的理论提供了最好的解释,因此我建议你的同事阅读这些。

建议使用IDE集成来学习使用版本控制。集成和插件通常会隐藏用户的系统“细节”,这可能非常令人困惑,特别是如果你不知道“引擎盖”之类的东西。

我更喜欢像TortoiseSVN这样的工具,你可以直接执行大多数操作,也可以手动执行,而不需要任何“魔法”。例如,一个非常常见的误解是不了解工作副本与服务器上的存储库之间的差异。我经常看到,切换到直接在文件系统上运行的工具将有助于解决这种情况,因为用户被迫主动思考他在做什么以及为什么。

与生活中的其他一切一样,使用版本控制也是最好的个人经验 - 尝试和失败,并再次尝试。这就是I recommend creating sandbox home folders for everyone的原因。允许他们试验系统中的各种功能,而不必担心破坏项目中的任何内容或丢失数据。

答案 1 :(得分:12)

首先,您需要采用“独立于软件”的方法来解决此问题。不要强迫他们阅读Red Bean书籍,或者尝试告诉他们所有漂亮的SVN命令。相反,您应该首先尝试使用版本控制来教授正确的工作流程。简而言之,这意味着:

  1. 更新您的观点
  2. 进行一些更改
  3. 测试您的代码
  4. 再次更新
  5. 如有必要,解决合并冲突
  6. 提交
  7. 请注意,我将排除初始结帐流程,因为您应该在那里帮助他们查看他们的初始视图。以上步骤只是启用SCM的开发人员应该每天做什么(顺便说一下,你也应该真正强调这一点,否则那些担心合并冲突的人只会随着时间的推移变得更糟)。 / p>

    SCM成功采用的关键是双重的;首先,您需要让人们习惯使用软件来处理正常的,非痛苦的事情(即更新/提交)。如果你不这样做,那么开发人员将倾向于避免使用SCM,直到你为此烦恼并询问为什么他们在两周内没有提交任何代码。其次,你需要教会人们如何克服可能导致他们失去工作的常见痛苦场景。

    SCM系统确实可能会破坏工作,并且通常在之前发生任何事情都会通过合并冲突提交到存储库。你应该模拟合并冲突,让他们解决它们,然后让它们自己做同样的事情。你应该解释一下:

    • 冲突后.r1,.r2,.mine和原始文件的含义是什么
    • 显示如何以图形方式解决冲突
    • 现在重新编译并再次测试软件,以确保
    • 再次备份.mine文件,以确保
    • 然后提交

    SCM中有许多更复杂的东西,只有在基础知识得到充分理解后才能解释以后。甚至不用提及合并或标记或类似的东西,直到他们有几周的日常经验。否则,复杂性和额外的风险将使这个新工具对他们来说更加“无用”。

    同样,这里的关键是以软件中立的方式强调每日SCM工作流程,并慢慢解释特定SCM系统出现时的怪癖。合并是唯一需要首先解释的复杂因素,因为它可能是每天遇到的唯一痛苦的事情。其他所有内容都应该在出现时加以解释。

答案 2 :(得分:7)

一步一步给出所需程序的简单“备忘单”是最好的方法。 SVN确实有一些不明显的陷阱。我已经参与了使用它的新人,有时他们会从当前版本中删除整个代码块等等。当然,你可以随时返回并从之前的版本中获取,但SVN 是< / em>对新人来说是可怕和危险的。牢记这一点,并为所需的操作编写非常简单但明确的指令!

答案 3 :(得分:7)

“我怎样才能让它们像版本控制一样?”

删除他们的工作副本,他们会很快掌握有用的版本控制软件!

说真的,使用VCS与成熟的开发人员并驾齐驱。如果你不知道为什么你想要Subversion,我不会相信他们是开发者。他们可能有技能编程,但编程只是成为开发人员的一部分。

我确实相信,在你丢失代码之前,你真的永远不会欣赏VCS。

答案 4 :(得分:3)

  • 无限撤消 - 无需担心丢失的更改
  • 备份,不再是您的责任
  • 'time machine'功能 - 上周五晚上的代码是什么样的?
  • 协作
  • 中心,源代码的“官方”版本可以轻松构建版本
  • 比较:有人敢触摸你的代码,他究竟改变了什么?
  • 标记:标记已准备好演示的稳定版本,您可以在
  • 之后继续在代码库中进行开发

只有两名开发人员修改同一源文件中的同一行时才需要'合并'。它在小团队中并不经常发生,需要几分钟才能解决。所有其他更改由版本控制系统自动合并。

答案 5 :(得分:2)

如果他们大多是学生,那么在“现实世界”中有一个卖点就是很多人非常重视版本控制。

如果他们害怕删除某些内容,请展示删除某些重要文件并演示restore deleted files的能力。

或者他们可能会喜欢不同类型的版本控制,例如git或mercurial。

答案 6 :(得分:1)

给他们简短谈谈svn。告诉他们有什么好处以及如何使用它。

我在大学的第一份工作中设法获得SVN并没有遇到任何麻烦,尽管我在使用tortoise SVN的文件系统级别使用它。我不是那么聪明,所以如果我可以拿起它,任何人都可以。

答案 7 :(得分:1)

版本控制最大的问题是冲突解决。如果您真的想要安全玩,请尝试以下工作流程:

  1. 每个开发人员在开始编码之前都会从主干创建一个分支;
  2. 开发人员在自己的分支中实现一个功能并提交(无需更新,因为他是他所在分支的唯一开发人员);
  3. 一些经验丰富的开发人员审核代码,测试并将分支修订合并到主干;
  4. 冲洗并重复
  5. Subversion 1.5新功能非常适合这种工作流程。

答案 8 :(得分:1)

你真的不能让任何人喜欢它。但是如果你自己开始使用它并树立了一个很好的例子,那么好处就会变得明显。您需要不断更新服务器并确保服务器已备份。这样,当系统中存在一个疯狂的错误时,您将拥有日志以显示导致该错误的更改。你知道你需要做什么。不要让别人的无知阻止你。

答案 9 :(得分:1)

与他们一起讨论版本控制好的原因。更好的是,让他们通过一些玩具项目,时间压力使他们经常提交。有些人只允许他们通过svn共享代码,而在其他人只能通过共享目录共享代码。

之后他们会知道它是什么。

答案 10 :(得分:0)

SVN跟踪项目开始以来的所有变化,因此实际上没有办法只是通过点击“错误”按钮就可以丢弃你的工作。我真的认为所有重要的工作都应该在版本控制之下,即使没有团队(我只使用代码并使用它)。

在我阅读this little book之前,我从未真正看到这一点,试着让他们至少阅读前20页。在颠覆和任何编辑器的“撤消”按钮之间有一个很好的类比,这可能说服他们使用它(它与我合作:))

答案 11 :(得分:0)

我建议他们至少阅读 http://svnbook.red-bean.com/en/1.5/index.html的基本部分,这里写得很幽默。它涵盖了使用命令行工具,但概念是相同的没有无论你使用什么接口(即TortoiseSVN或Subclipse)

答案 12 :(得分:0)

发送给:

给他们留下深刻印象的是,任何使用半个合适的源控制系统(即不是VSS)的人都会将他们诋毁为完全和彻底的傻瓜。

答案 13 :(得分:0)

K让你的朋友read this.接下来在几个宠物项目中首先学习cli,这大大澄清了这一点。我第一次看到subclipse让我讨厌eclipse。部分是因为我之前从未使用过颠覆。

  • check out =获取本地副本 存储库中的代码。
  • 更新=确保您的本地副本 与主副本保持同步。 又名服务器。
  • commit =将您的更改添加到 主副本
  • merge =你加上别人的 你退房后承诺。 合并允许你保持两种状态 一点点的变化 监督编辑。

合并是一个很好的功能,但一开始有点复杂。

答案 14 :(得分:0)

你需要首先在版本控制的概念上出售它们,以便他们了解svn的工作原理。

要尝试的一些事情是

  • 创建用于培训和实验的沙箱存储库
  • 尝试组织一些培训课程/研讨会。如果您对自己的运行没有信心,请尝试与当地的Linux用户组聊天,看看他们是否认识可以提供帮助的人。
  • 记录您的开发过程,包括常见的颠覆使用方案。

同样值得向学生们指出,源代码控制经验对他们的简历来说是一个加分。

关于提交.project文件的具体问题,您可以在属性上设置svn:ignore属性,也可以在每个用户subversion配置文件中设置global-ignores值。

答案 15 :(得分:0)

您可能希望为调用svn命令之前需要显式确认的最危险命令(我主要考虑恢复)创建别名。

此外,如果他们使用Eclipse,他们可以设置他们的编辑器,以便它保留当前代码的N个工作副本。我已经从使用该功能的几个愚蠢的版本控制错误中拯救了自己。

答案 16 :(得分:0)

这是一个体面的SVN“备忘单”,它描述了基本用法:http://abbeyworkshop.com/howto/misc/svn01/

答案 17 :(得分:0)

他们总是可以尝试“穷人的CVS”:让他们在登记/退出任何东西之前做一段他们的代码,并将它们存储在硬盘中的某个地方。

最后,他们会有一堆文件,如:

  • MyProject01.zip
  • MyProject02.zip
  • (等)

这将使他们明白,如果他们做了一些愚蠢的事情,他们的“工作”就不会被“摧毁”,并且会非常麻烦,迫使他们学习如何正确使用SVN(来吧,不是那很难!)。

我个人发现这个穷人的方法远远优于Visual SourceSafe:在前雇主的情况下,我被迫使用那种怪物......在第二次存储库完全崩溃后,他们感谢我: d

答案 18 :(得分:0)

如果您正在使用Windows计算机进行开发,请尝试使用TortoiseSVN作为您的subversion客户端。界面真的很棒。我会帮助他们摆脱版本控制的恐惧。

答案 19 :(得分:0)

试试this。我在'SVN for dummies'搜索中找到它,它被描述为'傻瓜SVN,奶奶可以理解的指南':D

答案 20 :(得分:0)

它充满信心地使用新东西,并了解它们正在使用的东西。一旦你使用它,它很高兴它有效,'分歧'就会消失。

首先尝试培训概述 - here's a project,提供一些powerpoint幻灯片以提供帮助。

给他们一本svn书并链接到TortoiseSVN,一旦他们有了概述,就阅读它。

然后尝试使用沙箱回购的实践研讨会。

然后在他们真正使用它的同时可以提供一周左右的帮助。

这种方法适用于所有事情,而不仅仅是SVN。