为什么 Visual SourceSafe 的浏览效果如此差? [英] Why is Visual SourceSafe viewed so poorly?

查看:18
本文介绍了为什么 Visual SourceSafe 的浏览效果如此差?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

本周我正在面试一家公司的职位,在那里我将成为唯一的初始开发人员,并支持我接手工作的应用程序.由于此类职位在细节上可能千差万别,因此我计划提倡一些具体的方法来使这项工作可行.

I'm interviewing this week for a position at a firm where I would be the sole initial developerplus support the application I am taking over work for. Because positions like this can vary so wildly in the details, I plan to go in advocating a number of specific approaches that would make the job workable.

我正在考虑提出的一件事是,倾向于将现有源代码从 SourceSafe(它目前驻留在那里)转移到更好的版本控制产品中,例如 Perforce.

One thing that I'm considering bringing up is an inclination to move the existing source code out of SourceSafe (where it is currently resident) into a better version control product like Perforce.

我在使用 SourceSafe 时遇到过很多糟糕的经历,它们导致了大量问题,例如永久文件锁定和代码损坏.独自一人,恐怕那些轶事听起来像是我想改变它,因为我不喜欢它".如果我要提起这个话题,我想要一个灌篮案例.

I've had a number of bad experiences with SourceSafe causing massive problems like permanent file lock-out and code corruption. Alone, I'm afraid that those anecdotes sound like "I want to change it because I don't like it." If I'm going to bring the subject up, I want to have a slam dunk case.

那么,SourceSafe 被视为劣质产品的经验原因是什么?

So, what are the empirical reasons that SourceSafe is viewed as an inferior product?

推荐答案

问题很多此处(诚然从 2002 年开始,但此后产品并没有真正改变)

There's a long list of problems here (admittedly from 2002 but the product hasn't really changed since then)

这是链接中的文本,以防它消失.页面已根据 CCA3 获得许可.

here's the text from the link, in case it disappears. Page is licensed under CCA3.

作者:艾伦·德·斯梅特

by Alan De Smet

版本控制系统有很多很好的解决方案.SourceSafe 不是其中之一.

There are many fine solutions for revision control systems. SourceSafe isn't one of them.

到 2002 年春天,我使用 SourceSafe 已经五年了.它一直以来是一次不愉快的经历.新版本未能改进任何进口.我希望劝阻你不要使用 SourceSafe,免除你我的糟糕经历.

I used SourceSafe for five years though spring 2002 . It has consistently been an unpleasant experience. New versions failed to improve anything of import. I hope to dissuade you from using SourceSafe, sparing you the bad experiences I have had.

版本控制系统应该提供强大的分支支持.凭借强大的分支支持,开发人员可以轻松地在努力下一个版本的同时对旧版本进行小修改主要发布仍在继续.可以检查高度实验性的代码进入一个分支,使其与主流开发分开但备份它并使其可供其他开发人员使用.如果项目被冻结"而里程碑或最终版本是已建成,开发人员可以继续开发到下一个分支上的版本.(或者更常见的是,一个新的分支可以是为冻结而创建,而总体开发仍在继续主枝.发布完成后,冻结的更改分支可以合并回主分支.)SourceSafe 的分支支持无法有效地支持其中任何一个.

A revision control system should provide powerful branching support. With strong branching support, developers can easily make minor revisions of old versions while work toward the next major release continues. Highly experimental code can be checked into a branch, keeping it separate from mainstream development but backing it up and making it available to other developers. If the project is "frozen" while a milestone or final release is built, a developer can continue development toward the next version on a branch. (Or more commonly, a new branch can be created for the freeze while general development continues on the main branch. When the release is done, changes on the frozen branch can be merged back into the main branch.) SourceSafe's branching support fails to effectively support any of this.

凭借强大的分支,修订控制系统必须还提供强大的合并支持以协调不同的分支.至少,系统必须允许开发人员检查两个分支之间的差异,将它们修改为创建一个合并版本,并在满意时将它们签入.SourceSafe 的合并支持与检查紧密集成在,使得难以检查差异和测试在将其检入树之前建议合并.有了这个弱支持级别,很容易将无功能的代码检查到版本控制系统.

With powerful branching, a revision control system must also provide strong merging support to reconcile different branches. At the least, the system must allow a developer to examine the differences between two branches, modify them to create a merged version, and when satisfied check them in. SourceSafe's merge support is tightly integrated with checking in, making it difficult to examine differences and test the proposed merge before checking it into the tree. With this weak level of support, it's easy to check non-functioning code into the revision control system.

应该可以轻松扩展您的修订控制具有附加功能的系统.发送能力总结登记的电子邮件是必不可少的.当与一个团队,定期电子邮件列出签入的文件和签入与他们相关的消息确实有助于留住每个人与最近的变化保持同步.您可能还想添加过滤器以防止签入不符合某些要求的代码要求(标准版权声明或不编译).SourceSafe 几乎不支持这一点.虽然有可能,但每一个客户端需要安装附加功能.如果单个客户端缺少扩展,它会悄悄地失败按预期行事.(有关详细信息,请参阅Visual SourceSafe 6.0 自动化.检查捕获 SourceSafe 事件?概述"部分.)您可以支付甚至更多对于第三方解决方案,但是否有意义将更多资金投入到一个根本就坏掉的产品上?

It should be possible to easily extend your revision control system with additional functionality. The ability to send out emails summarizing check-ins is essential. When working with a team, regular email messages listing files checked in and the check in messages associated with them really help keep everyone up to date with recent changes. You might also want to add filters to prevent check-ins of code that doesn't meet certain requirements (standard copyright statements or doesn't compile). SourceSafe barely supports this. While it is possible, every single client needs to have the additional functionality installed. If a single client lacks the extension, it will quietly fail to behave as expected. (For details, see Visual SourceSafe 6.0 Automation. Check the section "Trapping SourceSafe Events? An Overview".) You can pay even more for a third party solution, but does it make sense to invest more money in a fundamentally broken product?

更新本地工作区以匹配服务器时,文件在服务器上删除的应该带到您的注意力.(或删除,因为旧版本可以找回来自修订控制系统.)不这样做的风险是项目中使用的日期文件,通常会导致问题.当一个过时的标题时,我经常遇到这个问题文件错误地包含在我的项目中.SourceSafe 失败删除过期文件或提供任何警告.

When updating your local workspace to match the server, files which were deleted on the server should brought to your attention. (Or deleted, since the old version can be retrieved from the revision control system.) Failure to do so risks out of date files being used in your project, often causing problems. I've frequently run into this problem when an out of date header file is incorrectly included into my project. SourceSafe fails to delete the out of date file or provide any warning.

SourceSafe 无法通过慢速网络连接使用.它是实际上无法通过公共互联网使用.此外,因为 SourceSafe 通过网络共享工作,如果您放置互联网上的 SourceSafe 服务器,你暴露了任何弱点在您的服务器上向全世界共享文件.当然,如果您愿意在无效的修订中投入更多资金控制系统,您可以购买第三方产品来解决这个问题.

SourceSafe is unusable over slow network connections. It's effectively unusable over the public internet. In addition, because SourceSafe works over network shares, if you place a SourceSafe server on the internet, you're exposing any weaknesses in your servers file sharing implementation to the entire world. Of course, if you're willing to invest more money in your ineffective revision control system, you can buy a third party product to solve this problem.

开发者使用第三方模块的情况并不少见在您的项目中快速添加所需的功能.为了例如,您可以使用 Codejock Software 的 Xtreme工具包.检查这些第三方模块是很自然的进入您的版本控制系统.这样,当你踏向后检查以前的修订版,您可以获得支持库和第三方模块的相同版本此时用于构建您的代码.

It's not uncommon for a developer to use third party modules in your project to quickly add required functionality. For example, you might use Codejock Software's Xtreme Toolkit. It's natural to check these third party modules into your revision control system. This way, when you step backward in time to examine a previous revision, you can get the same versions of supporting libraries and third party modules that were used to build your code at this time.

不幸的是,SourceSafe 使跟踪第三方模块极其困难.最初检查第一个版本不难.检查新版本需要良好的记忆力和注重细节.要添加新版本,您首先递归检查保存模块的文件夹.现在删除目录并将其替换为新版本.报到新版本.您现在需要识别任何文件或新版本中添加的目录.右键单击模块在 SourceSafe 中的文件夹并使用显示差异"来递归生成已添加的文件列表.笔记哪些目录包含已添加的文件以及哪些已添加目录.现在关闭差异报告(该报告是模态的,阻止您在使用 SourceSafe 时可见的).添加您通常添加的新目录目录.要添加新文件,请访问每个目录新建文件并使用 File >添加文件以添加它们.再次,使用显示差异"命令递归生成文件列表已被删除.记下这些文件并关闭再次报告分歧.现在删除这些文件中的每一个来源安全.

Unfortunately, SourceSafe makes tracking a third party module extremely difficult. Initially checking the first version in isn't hard. Checking a new version in requires a good memory and attention to detail. To add a new version, you first recursively check the folder holding the module out. Now delete the directory on disk and replace it with the new version. Check in new version in. You now need to identify any files or directories added in the new version. Right click on the module's folder in SourceSafe and use "Show difference" to recursively generate a list of files which have been added. Note which directories hold files which have been added and which directories have been added. Now close the report of differences (the report is modal, preventing you from using SourceSafe while visible). Add the new directories as you would normally add directories. To add the new files, visit each directory holding new files and use File > Add Files to add them. Again, use the "Show difference" command to recursively generate a list of files which have been removed. Note these files and close the the report of differences again. Now delete each of these files in SourceSafe.

如果你真的调整了第三方模块,SourceSafe没有特别帮助追踪差异和将它们合并到新版本中.

If you've actually tweaked the third party module, SourceSafe provides no particular help in tracking down the differences and merging them into the new version.

(为了比较,要签入第三方的新版本使用 CVS 的模块,你会只需运行命令cvs -q import -m 'Import of XtremeToolkit 1.9' xtremetoolkit Codejock XT_1_9".就是这样.如果您对需要集成的模块进行了更改,您将使用cvs checkout -j XT_1_8 -j XT_1_9xtremetoolkit".这会给你一个本地副本合并的更改,您可以立即签入,如果满意.))

(For comparison, to check in a new version of a third party module using CVS, you would simply run the command "cvs -q import -m 'Import of Xtreme Toolkit 1.9' xtremetoolkit Codejock XT_1_9". That's it. If you've made changes to the module that need to be integrated, you would use "cvs checkout -j XT_1_8 -j XT_1_9 xtremetoolkit". That will give you a local copy of the merged changes which you can immediately check in if satisfactory.))

需要获取历史版本的情况并不罕见源代码.您可能需要旧版本来调查错误报告,或者当前代码出现故障,您需要得到一个正常运行的版本.SourceSafe 支持这一点,但它是对于非平凡的项目来说非常慢.为了获得历史版本,您首先需要为整个生成历史记录你感兴趣的项目.在一个有数百个项目的项目中文件和一年多的历史,这很容易超过五分钟(即使您将实际搜索限制在过去 48 小时的更改).生成此历史记录后,您通过选择上次签入来指定要获取的版本接受.此过程完成的慢速不鼓励开发人员检查以前的版本,大大违背了修订控制系统的目的.

It's not unusual to need to get a historical version of the source code. You might need an older version to investigate a bug report, or the current code is malfunctioning and you need to get a functioning version. SourceSafe supports this, but it's extremely slow for non-trivial projects. To get a historical version, you first need to generate a history for the entire project you're interested in. On a project with hundreds of files and just over one year of history, this can easily take over five minutes (even if you restrict the actual search to the last 48 hours of changes). Once this history is generated, you specify the version to get by selecting the last check-in to accept. The slow speed at which this process is completed discourages developers from examining previous versions, defeating much the purpose of a revision control system.

在对项目副本进行大量更改时,您可能会被要求对项目进行一些小的更改.最多执行此操作的有效和最安全的方法是获取另一个副本项目进行更改.SourceSafe 存在两个问题在这样做.首先,SourceSafe 只识别单个副本您系统上的项目.你需要要么移动项目目录回到 SourceSafe 期望规范的位置复制,否则您需要重新设置 SourceSafe 的位置概念存在规范副本.使用任何一种技术,都可以很容易地不小心将 SourceSafe 指向错误的项目并检查错误版本的文件.其次,SourceSafe 的弱合并功能意味着如果您需要在两者中更改相同的文件项目的副本,你需要非常小心对一个项目的更改不会破坏另一个项目的更改.

While making extensive changes to a copy of the project, you may be asked to make a small change to the project. The most efficient and safest way to do this is to get another copy of the project to make the change on. SourceSafe presents two problems in doing so. First, SourceSafe only recognizes a single copy of the project on your system. You'll need to either move the project directories back where SourceSafe expects the canonical copy, or you'll need to reset SourceSafe's notion of where the canonical copy exists. Using either technique, it's easy to accidentally point SourceSafe at the wrong project and check the wrong versions of files in. Secondly, SourceSafe's weak merging features mean that if you need to change the same file in both copies of the project, you'll need to be very careful that changes to one project don't destroy changes in the other.

Microsoft 建议您的数据库不要超过 5 GB.(来源:Microsoft Best实践)虽然这是一个大型数据库,但对于大型数据库来说并非没有道理项目,特别是如果您签入大型二进制文件(例如Microsoft Word 文档).

Microsoft recommends that your database not exceed 5 GB. (Source: Microsoft Best Practices) While this is a large database, it's not unreasonable for a large project, especially if you check in large binary files (like Microsoft Word documents).

当您的系统失去连接时,SourceSafe 可能会挂起或崩溃到 SourceSafe 数据库.虽然这对视觉很刺激SourceSafe,这可能会导致您在 Visual Studio 运行时丢失工作使用 SourceSafe 集成.简单地管理 SourceSafe在 Visual Studio 中打开的项目足以让你自己打开风险.为了尽量减少这种风险(并加速 ClassView),我建议你关注Microsoft 关于禁用 SourceSafe 集成的说明.

SourceSafe can hang or crash when your system loses connection to the SourceSafe database. While this is irritating for Visual SourceSafe, this can cause you to lose work when Visual Studio is using SourceSafe integration. Simple having a SourceSafe managed project open in Visual Studio is enough to open yourself to the risk. To minimize this risk (and speed up ClassView), I suggest you follow Microsoft's directions on disabling SourceSafe integration.

SourceSafe 并不是真正作为服务器运行,而是作为一组通过 SMB 共享的文件.因此,您依赖于每个个别客户不要行为不端.一个行为不端计算机可以破坏数据库.文件共享中的问题在您的操作系统上实施可能会损坏数据库.用户只需要只读访问版本控制系统需要写访问权限服务器,增加风险(SourceSafe 目录所需的网络权限).

SourceSafe doesn't really run as a server, but as a set of files shared over SMB. As a result, you're relying on each individual client to not misbehave. A single misbehaving computer can destroy the database. A problem in the file sharing implementation on your operating system can damage the database. Users only needing read-only access to the revision control system need write access to the server, increasing the risk (Required Network Rights for the SourceSafe Directories).

当然,在这种高腐败风险的情况下,Microsoft 建议您运行分析诊断程序每周.(来源:Microsoft Best实践)当分析正在运行时,您的所有开发人员都在已锁定退出系统(希望大家记得退出首先是 SourceSafe!).我使用 SourceSafe 的经验表明在 Windows 2000 下运行的 2 GB 系统需要几个小时来检查是否每周运行.

Of course, with this high risk of corruption, Microsoft recommends that you run the Analyze diagnostic program weekly. (Source: Microsoft Best Practices) While Analyze is running all of your developers are locked out of the system (I hope everyone remembered to quit from SourceSafe first!). My experience with SourceSafe shows that a 2 gigabyte system running under Windows 2000 takes several hours to check if run weekly.

如果您的团队使用相同的 SourceSafe 存储库不同的时区,您可能会遇到问题.(见Microsoft 有关时区错误的详细信息.) 唯一的解决方案Microsoft 提供了错误设置时钟的方法计算机到单一时区,或购买第三方产品.

If you have teams using the same SourceSafe repository in different time zones, you're likely to have problems. (See Microsoft's details on the time zone bug.) The only solutions Microsoft provides are to incorrectly set the clocks of the computers to a single time zone, or to purchase a third party product.

相关地,如果任何客户端使用 SourceSafe 的计算机无法同步时钟.计算机之间几分钟的差异会导致SourceSafe 的奇怪行为与它试图调和似乎来自未来的信息.

Relatedly, this is a potential problem if any of the client computers using SourceSafe fail to have synchronized clocks. Differences of several minutes between computers can cause strange behavior from SourceSafe with it tries to reconcile information that appears to come from the future.

您的修订控制系统必须值得信赖.你是将您的辛勤工作委托给您的修订控制系统.如果您的数据已损坏,系统一文不值.SourceSafe的基本设计假设客户始终值得信赖功能正常,并且没有任何干扰通信导致数据损坏.因此,SourceSafe 是脆弱和不可信.我曾与 SourceSafe 合作过三个不同的工作.在每种情况下,最终 SourceSafe数据库损坏.数据已损坏,工作已已丢失,时间已浪费在问题上.与其他开发人员,我了解到我的经验不是独一无二.

Your revision control system must be trustworthy. You're entrusting your hard work to your revision control system. If your data is corrupted, the system is worthless. SourceSafe's fundamental design assumes that clients are trustworthy, always function correctly, and that nothing interferes with the communication causing corrupted data. As a result, SourceSafe is fragile and untrustworthy. I have worked with SourceSafe at three different jobs. In each case, eventually the SourceSafe database became corrupted. Data has been corrupted, work has been lost, time has been wasted on the problem. Speaking with other developers, I have learned that my experiences are not unique.

  • 更改目录等次要操作会擦除整个输出窗口的内容,很难检查过去行动.

  • Minor actions like changing the directory erase the entire contents of the output window, making it difficult to examine past actions.

将您的本地版本与远程存储库进行比较是笨拙.您选择您对 SourceSafe 感兴趣的目录并选择比较差异.结果报告是模态的,阻止您在检查源时使用 SourceSafe报告.

Comparing your local version to the remote repository is clumsy. You select the directory you're interested in SourceSafe and select Compare Differences. The resulting report is modal, preventing you from working with SourceSafe while examining the report.

从 SourceSafe 获取最新版本的文件时,本地更改的每个文件都会弹出一个对话框进行确认更新.当对话框出现时更新操作完全停止等待您的回复.这尤其令人恼火,如果你获取最新版本,暂时远离计算机,然后返回发现 SourceSafe 只完成了 10% 并且等待你的答复.您可以阻止对话框以多种方式返回,但这样做你会没有表示遇到任何此类文件.所以当你返回完成的更新,您将不知道SourceSafe 遇到了潜在的问题.SourceSafe 应该遇到这些文件时,请在输出窗口中记下这些文件,使其易于扫描输出窗口以查找要调查的文件.

When getting the latest version of files from SourceSafe, each file changed locally causes a dialog to pop up to confirm the update. The update action entirely stops while the dialog waits for your response. This is particularly irritating if you get the latest version, step away from your computer for a while, then return to discover that SourceSafe is only 10% done and waiting for your response. You can prevent the dialog from returning in several ways, but in doing so you get no indication that any such files were encountered. So when you return to the finished update, you will have no idea that SourceSafe encountered potential problems. SourceSafe should note these files in the output window when encountered, making it easy to scan the output window for files to be investigated.

如果您正在考虑 SourceSafe,请考虑其他.如果您现在正在使用 SourceSafe,请尽快迁移.这里只是一些.

If you're considering SourceSafe, consider something else. If you're using SourceSafe now, migrate away as soon as possible. Here are just a few.

如果您只是必须使用 SourceSafe,请务必花点时间看看微软的列表Visual SourceSafe 6.0 中的错误列表Visual SourceSafe 6.0 中已修复的错误,因此您知道该做什么预计.(这些链接最初取自 Microsoft 的错误页面.如果您有不同版本的SourceSafe 或以上链接失效.)

If you simply must use SourceSafe, definitely take the time to look at Microsoft's list of bugs in Visual SourceSafe 6.0 and list of fixed bugs in Visual SourceSafe 6.0 so you know what to expect. (These links were originally taken from Microsoft's Bugs page. This page may be useful if you have a different version of SourceSafe or the above links fail.)

这篇关于为什么 Visual SourceSafe 的浏览效果如此差?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆