git and subversion

Linus因不满现有版本控制系统,两周内开发出Git。Git强调数据完整性和分布式特性,提高了开发效率。分布式版本控制系统因其方便的合并操作、轻松管理等优势在开源社区中流行。

Linus 在 Google 做了他对于版本控制软件的演讲。他似乎非常偏爱分布式版本控制软件,否则宁愿用 tarball+patch (其时 tarball+patch 确确实实是一种分布式的方法呢!)。以至于在 Linux 内核不能试用 BitKeeper 以后,他自己动手写了 git 。他对版本控制软件有许多要求,比如:

  1. 取出来的东西要和放进去的东西一样。如果连数据的完整性都无法保证的话,谁还敢用这样的版本控制软件?不过确实有这样的软件存在呢。
  2. 分布式。我在后面会解释分布式的好处。
  3. 高效率。Linux 内核也算是一个很大的软件了,如果版本控制系统运行起来慢吞吞的,确实是非常让人恼火的呢。
  4. ……

Linus 当时(Linux 2.6.12 的那阵)说现有的版本控制系统都不行,他两个周就能写出一个更好的。结果他 4 月 7 日开始写 git ,在 4 月 20 日的时候内核已经开始使用 git 进行源代码管理了。参见这里的原文:

Linus began writing “git” on April 7′th [story], a rapidly evolving userland filesystem upon which various SCM implementations are being built or adapted. The 2.6 kernel source is already managed in a git repository, with the first succesful git release being 2.6.12-rc3 on April 20′th

当然可用离好用还是有很远的距离的,不过 Linus 确实很厉害了!后来 git 由其他人维护,并且在用户界面上进行了改进,现在已经相当好用了。另外一个有名的开源的分布式版本控制系统是 mercurial ,这个是由 Python 写成的,不知道在效率一条上满不满足 Linus 的要求,呵呵!其时各种分布式版本控制软件在开源社区是很流行的,有时候下载一些软件的时候就看到如果要获取最新代码,就要用作者使用的版本控制系统来进行抓取,像 Arch 、bazaar 、monotone 、darcs 一类的,都是使用得比较多的分布式版本控制系统。

为什么分布式版本控制系统会流行起来呢? sishen 在他的 Blog DistributedSCM or not? 里面提到了传统的版本控制和分布式版本控制模型之间的差别。下面说一下我自己的看法:

  • 更方便的 Merge 。分布式管理必然导致大量的 Branch 和 Merge 操作。因此分布式版本控制系统都特别注意这方面。在传统的 CVS 里面制作 Branch 和 Merge 简直就是噩梦,Subversion 作为一个用于替代 CVS 的系统,专门改进了 Branch 操作,在它的主页上可以看到这样一句话:
    Branching and tagging are cheap (constant time) operations

    There is no reason for these operations to be expensive, so they aren’t.

    Branches and tags are both implemented in terms of an underlying “copy” operation. A copy takes up a small, constant amount of space. Any copy is a tag; and if you start committing on a copy, then it’s a branch as well. (This does away with CVS’s “branch-point tagging”, by removing the distinction that made branch-point tags necessary in the first place.)

    然而似乎人们没有注意到,Branch 是轻松了,可是 Merge 呢?如果不能很方便地 Merge 回来,做 Branch 仍然是噩梦。事实上,我就经历过在开发团队里面由于队友操作不对而在 Merge 的时候把我的许多代码都覆盖掉了。当时正是使用的 subversion 。虽然源代码仍然在历史里面,但是要去一个一个地找出被覆盖掉的文件并恢复过来确实是一件很难忘的事情。

  • 更轻松的管理。传统的版本控制系统使用中央仓库,一些仓库相关的管理就只能在仓库上进行。赋予开发团队每一个人中央仓库的管理权限是非常不好的。但是有时候确实会比较不方便的地方。
  • 更健壮的系统。分布式系统一般情况下总是比单服务端的系统要健壮,因为但服务端一旦服务器挂掉了整个系统就不能运行了。然而分布式系统通常不会因为一两个节点而受到影响。
  • 对网络的依赖性更低。虽然现在网络非常普及,但是并不是随时随地都有高速网络,甚至有时候根本没有网络可以访问。低速的网络会让人心情烦躁,有时候就呆呆地盯着屏幕上的 commit 进度,什么事情也干不了。而没有网络连接更是致命的:你无法 commit !这表示你进行任何改动以前都必须小心翼翼,否则你可能再也找不会你曾经写的一些代码了。
  • 更少的“仓库污染”。我不知道用“仓库污染”这个词是否恰当。有时候你要做一个模块,它不是太大,所以没有必要为它新建一个 branch ,但是它又不是那么小,不可能一次提交就做好。于是便会提交一些不完整的代码到仓库,有时候会导致整个程序无法运行,严重影响团队里其他人的开发。大多数人在这种情况下的解决办法都是写完之后再提交。但是作为习惯了版本控制的人来说,进行不计后果的大幅修改是经常的事情,到后来突然发现自己先前的代码没有提交,就后悔莫及了。如果是分布式系统的话就不会存在这样的问题,因为本地仓库的修改不会影响到别人的仓库。当你完成并测试以后,就可以在邮件列表里面说:我已经把这个模块做好了。然后感兴趣的人就可以从你这里 pull 你的成果了。

然而,不管怎么说,现在传统的版本控制系统仍然是主流。许多源码 Host 站点如 SourceForgeGoogle Code 等都是使用主流的 subversion 作为源代码版本控制的工具。

事实上,有时候我把 subversion 和 git 混合起来用。因为二者都有忽略某些文件的功能,只要在 subversion 的目录属性里面忽略掉 .git 一类的文件,再在 .gitignore 里面忽略 .svn 等文件,两者基本上也能很和谐地合作。通常在本地工作,使用 git 控制,并在适当的时候用 subversion 提交一次。

事实上它们配合得相当不错。即使是像 rm 一类的命令。比如,先用 svn rm foo<code> 把 <code>foo 删掉了。当前目录下已经不存在 foo 了,不过 git rm foo 仍然是能正常工作的。不过这和更改文件内容不一样了,不能自动跟踪,只能每次都在两个版本控制系统下都执行一遍。虽然可以用一些简单的脚本来减少这种重复劳动,但是有时候混用两个东西确实有种提心吊胆的感觉。 :P

标题基于Python的汽车之家网站舆情分析系统研究AI更换标题第1章引言阐述汽车之家网站舆情分析的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义说明汽车之家网站舆情分析对汽车行业及消费者的重要性。1.2国内外研究现状概述国内外在汽车舆情分析领域的研究进展与成果。1.3论文方法及创新点介绍本文采用的研究方法及相较于前人的创新之处。第2章相关理论总结和评述舆情分析、Python编程及网络爬虫相关理论。2.1舆情分析理论阐述舆情分析的基本概念、流程及关键技术。2.2Python编程基础介绍Python语言特点及其在数据分析中的应用。2.3网络爬虫技术说明网络爬虫的原理及在舆情数据收集中的应用。第3章系统设计详细描述基于Python的汽车之家网站舆情分析系统的设计方案。3.1系统架构设计给出系统的整体架构,包括数据收集、处理、分析及展示模块。3.2数据收集模块设计介绍如何利用网络爬虫技术收集汽车之家网站的舆情数据。3.3数据处理与分析模块设计阐述数据处理流程及舆情分析算法的选择与实现。第4章系统实现与测试介绍系统的实现过程及测试方法,确保系统稳定可靠。4.1系统实现环境列出系统实现所需的软件、硬件环境及开发工具。4.2系统实现过程详细描述系统各模块的实现步骤及代码实现细节。4.3系统测试方法介绍系统测试的方法、测试用例及测试结果分析。第5章研究结果与分析呈现系统运行结果,分析舆情数据,提出见解。5.1舆情数据可视化展示通过图表等形式展示舆情数据的分布、趋势等特征。5.2舆情分析结果解读对舆情分析结果进行解读,提出对汽车行业的见解。5.3对比方法分析将本系统与其他舆情分析系统进行对比,分析优劣。第6章结论与展望总结研究成果,提出未来研究方向。6.1研究结论概括本文的主要研究成果及对汽车之家网站舆情分析的贡献。6.2展望指出系统存在的不足及未来改进方向,展望舆情
【磁场】扩展卡尔曼滤波器用于利用高斯过程回归进行磁场SLAM研究(Matlab代码实现)内容概要:本文介绍了利用扩展卡尔曼滤波器(EKF)结合高斯过程回归(GPR)进行磁场辅助的SLAM(同步定位与地图构建)研究,并提供了完整的Matlab代码实现。该方法通过高斯过程回归对磁场空间进行建模,有效捕捉磁场分布的非线性特征,同时利用扩展卡尔曼滤波器融合传感器数据,实现移动机器人在复杂环境中的精确定位与地图构建。研究重点在于提升室内等无GPS环境下定位系统的精度与鲁棒性,尤其适用于磁场特征明显的场景。文中详细阐述了算法原理、数学模型构建、状态估计流程及仿真实验设计。; 适合人群:具备一定Matlab编程基础,熟悉机器人感知、导航或状态估计相关理论的研究生、科研人员及从事SLAM算法开发的工程师。; 使用场景及目标:①应用于室内机器人、AGV等在缺乏GPS信号环境下的高精度定位与地图构建;②为磁场SLAM系统的设计与优化提供算法参考和技术验证平台;③帮助研究人员深入理解EKF与GPR在非线性系统中的融合机制及实际应用方法。; 阅读建议:建议读者结合Matlab代码逐模块分析算法实现细节,重点关注高斯过程回归的训练与预测过程以及EKF的状态更新逻辑,可通过替换实际磁场数据进行实验验证,进一步拓展至多源传感器融合场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值