在版本控制系统中实现哪些功能?

时间:2009-07-31 07:26:09

标签: c++ version-control

我将在我的最后一年项目中用C ++实现一个版本控制系统。

我想知道:

  1. 版本控制系统必须支持哪些功能。
  2. 您认为现有实施​​中缺少哪些功能(以便我的版本控制系统不仅仅重新发明轮子)
  3. 开头的参考文献(如果有的话)。

11 个答案:

答案 0 :(得分:5)

如果你想做一些不同/创新的事情,那么我建议我们在源代码之外的其他方面寻找你的版本控制。还有其他应用程序,其中版本控制可能是有用的(例如文档的修订控制)和源代码控制已经广泛完成 - 您不太可能与其他源代码控制中尚未存在的创新相提并论。

答案 1 :(得分:4)

  1. 版本控制系统必须支持哪些功能。
    核心功能:创建项目,签入,签出,分支,获取最新/上一个,查看历史记录,比较,回滚
  2. 您认为现有实施​​中缺少哪些功能(以便我的版本控制系统不仅仅重新发明轮子)
    自动构建,代码分析,电子邮件通知,就地编辑器,基于数据库的存储

答案 2 :(得分:4)

忽略那些说不能做的人。在他们的开创性书籍“Unix编程环境”中,Kernighan和Pike开发(一个非常基础的)使用shell脚本,diff和sed只需几行代码。我相信你可以做类似的事情。

答案 3 :(得分:4)

#2 用户界面不错!

答案 4 :(得分:2)

第一个功能应该是:

<强>合并

如果您编写了完整的VCS并且合并很糟糕,则不会使用该功能。而你的VCS现在只是一个美化的备份系统。

合并也可能是最难实施的部分。

答案 5 :(得分:2)

能够在整个代码库中搜索一大块文本的实例。随着代码库变老(或者新人加入项目并且正在学习代码库),这变得非常重要。 SourceSafe有它,但其他一些没有。是的,Sourcegear Vault,我正在看

当然,这是SourceSafe做的少数事情之一,但它需要提及。

答案 6 :(得分:2)

站在巨人的肩膀上。如何为现有版本控制系统做出贡献,添加新功能和/或修复错误比重新发明轮子更好?

根据您喜欢的语言,您可能会找到一个用该语言编写的良好开源。

Python&gt; Mercurial,C&gt; Git,C ++&gt;单调

答案 7 :(得分:2)

看看GitHub联合创始人Tom Preston-Werner撰写的文章:The Git Parable,描述了如何根据第一原则构建类似Git的系统 。值得一读。

还要尽量避免陷入其他陷阱,例如设计文件格式和网络协议,并考虑到可扩展性,如果格式发生变化则不必破解它;要么提供版本号,要么提供功能列表。但这是更高级的事情,它假设您希望此VCS超越项目项目。

答案 8 :(得分:1)

我很佩服你的抱负,你的课程可能与我的不一样,但是你的报告往往会得到更多的分数而不是代码,所以知道你可以归档什么是很重要的,因为写报告需要2,3是编码的时间。

您可能需要尝试极其粗略地实现其他一些想法,以便在您提交之前让自己了解每个想法的难度。

Linus Torvalds可能已经在四周内开发了git的核心,但是为了让它真正可用,它需要花费更长的时间,而且他是Linus Torvalds!

答案 9 :(得分:0)

很多人怀念的是搁置更改的能力 - 即将文件作为临时提交进行检查,因此您可以定期保存工作副本(例如,每天晚上以防计算机被盗/损坏)但没有这些进度'更改显示在主要更改列表中。当你完成它们的工作后,然后检查它们以正常提交它们并删除临时数据(因为你不想;用无关的版本填充你的VCS)。

许多人未能做的另一件事是自动通知用户更改。例如。 svn你必须运行svn update才能获得团队成员所做的任何更改,这样做很自然,所以每次操作都会检索到更改(例如,保存一个更改列表,并将高度优化的数据块发送到每个结果后的客户)

尝试更好的存储二进制文件的方法,大多数SCM旨在处理文本,并且只是偶然地处理二进制文件(通常不是很好)。

在很多方面,我建议从现有的开源SCM开始,并根据您的更改进行扩展。这样,您可以免费获得基础知识的好处,让您专注于花哨的功能,但代价是学习如何开发SCM。 Subversion,git,mercurial,bazaar都是很好的参考SCM。

答案 10 :(得分:-6)

您无法创建完整版本控制系统作为最后一年的项目。而在C ++中,即使对于一个完整的团队来说,在4-6个月的时间内也几乎是不可能的。 (我认为FYP通常有4-6个月的时间表)。

您应该瞄准的是创建良好版本控制系统的子集。查看SVN开始并尝试开发它的一个子集。例如,SVN MINUS分支支持应该绰绰有余。

为什么选择C ++?尝试使用其他语言来更好地支持库,例如C#。请记住,C#应用程序发货更快:)