基于Git的代码托管平台JLUCODE

2017-01-14 21:09侯效永李良伟孙召宋春雨杨昊
计算机时代 2016年12期

侯效永+李良伟++孙召+宋春雨+杨昊++韩霄松

摘 要: 软件版本控制在软件行业的作用十分重要,而大多数在校学生对版本控制的了解却知之甚少。通过分析对比三大版本控制系统CVS、SVN、Git的优缺点,基于Git设计并实现了一个吉林大学代码托管平台JLUCODE,通过Git协议与Web平台实现本地与服务器的通讯。该平台主要实现代码托管、统计分析、论坛讨论和作业管理等功能,以帮助学生学习、理解版本控制的意义,提升自身的能力,更好地管理源码、完成作业。

关键词: 版本控制; 代码托管; Git; 代码分析

中图分类号:TP317 文献标志码:A 文章编号:1006-8228(2016)12-32-03

Abstract: Software version control plays a very important role in the software industry, but most of the students in the school know little about it. In view of this situation, the advantages and disadvantages of three revision control system, CVS, SVN, and Git are analyzed and compared in this paper. And a code hosting platform based on Git, JLUCODE, for the teachers and students of Jilin University is designed and implemented, the communications between local and server are realized through the Git protocol and Web platform. The platform mainly realizes the functions of code hosting, statistical analysis, forums and exercises management, to help students to learn and understand the meaning of version control, enhance their ability to better manage the source code, to complete the work.

Key words: version control; code hosting; Git; code analysis

0 引言

版本控制(Revision Control)是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一代码文件都得到同步[1]。软件版本控制致力于帮助程序员管理他们的项目资产,这是一门不可或缺的技术,如若软件的开发没有版本控制,开发项目定然会岌岌可危[2-3]。

为了让更多的程序员能有效并且更加简单地管理自己的源码资产,代码托管便应运而生。代码托管(Code Hosting)是基于版本控制系统开发的,也可以说是由版本控制系统派生出来的,只有以版本控制系统为基础而设计开发的代码托管平台才有其存在的必要,版本控制是代码托管的基石,其优劣也影响着托管平台的优劣[4-5]。

1 版本控制和代码托管平台

1.1 三大主流版本控制系统

在当今的软件开发行业中,主流的版本控制系统分别是CVS(并发版本系统)、SVN(集中式版本控制系统)、Git(分布式版本控制系统)。其中CVS出现最早,是1986年Dick Grune为了解决社区人员分散、合作不便等问题设计开发的一个版本控制工具。而SVN则是CollabNet为了弥补CVS在使用中所发现的不足,于2000年开发完成并发布的另一款版本控制工具。Git是于2005年发布的,主要是由于Bitkeeper收回对Linux社区的授权,Linus不愿使用CVS等其他版本控制工具而研发出来。表1展示三者功能的简单对比。

网络速度的快慢,决定着版本控制软件将代码提交到服务器上的进度,网速慢可能导致开发不连贯。而Git的许多操作都在本地完成,不同于CVS及SVN每次提交都需要与服务器交互,只需将一个阶段性或最终版本提交到服务器。如此,以Git作为代码托管平台的版本控制系统,只需在网络良好的时候,向托管平台提交便可,既方便又不影响开发。

1.1.2 Git的原子提交方式优势更大

CVS每次提交都是对单个文件进行版本的分别修改,Git则简易得多,Git是根据SHA-1算法生成惟一commitid[4]。因此,当想跟踪以前某次提交的代码时,不需要考虑到底提交了哪些文件,所有代码会一次性的提取出来。相比之下,Git在这方面更占优势。

1.1.3 Git合并分支简易得多[6]

无论是建立新的分支,还是在分支之间切换,相比CVS等版本控制系统,Git的分支管理则容易许多,它只需要一条命令即可完成,不需要再去新建多余的目录。而且,分支合并之后,提交的历史并没有清除,而是依然保留,这样更加有助于分支的管理和追踪。

1.2 优秀代码托管平台简介

SourceForge是一个基于Web的服务,提供了一个源代码库,下载镜像,bug跟踪等功能。它作为软件开发人员可以用它来控制和管理的中心位置自由和开放源码软件的开发。虽然SourceForge上是第一个提供代码托管服务的免费开源项目,但许多用户和项目现在已经转移到GitHub上,或其他软件托管设施,亦或自托管他们的软件。

GitHub是一个利用Git进行版本控制、专门用于存放软件代码与内容的共享虚拟主机服务。它由GitHub公司的开发者Chris Wanstrath、PJ Hyett和Tom Preston-Werner使用Ruby on Rails编写而成。截止2015年,GitHub已经成为世界上代码存放量最大的网站。然而,GitHub在国内也遭遇许多困难,网络封锁、中间人攻击、DOS攻击、旁观者攻击等。当然这些也并没有影响它在代码托管中“霸主”的地位。

上述三个托管平台都是由国外的公司研发的,国内的Git@OSC是开源中国社区所设计开发的一款基于Git版本控制系统的代码托管平台。由于开源中国积累了大量用户,在Git@OSC推出后,便受到了许多人的关注,因为GitHub的一些不稳定因素,所以许多人都希望Git@OSC能取代GitHub在中国的地位。然而,Git@OSC想要超越GitHub在国内的地位,还是比较困难的。而大多数代码托管平台都是基于Git开发的,如Gitlab、BitBucket等,Git已然成为一股潮流。因此我们搭建的代码托管平台同样以Git为基础。

虽然国外的代码托管平台功能齐全,但是由于网络原因,服务并不稳定,而国内的托管平台少有完全免费的。所以为了有效的管理代码,方便师生增强对版本控制的理解,提高开发效率,避免重复开发,我们设计并开发JLUCODE。

2 JLUCODE平台介绍

本平台采用B/S[7](Browser/Server)结构,访问本平台无需考虑用户所使用的系统环境,只需有浏览器(即B端)和网络即可访问我们的服务器(即S端)。

2.1 功能简介

本平台面向的用户是高校师生,主要功能结构如图1所示。

[JLUCODE系统][教学模块][用户管理][版本库模块][数据分析][论坛模块][作业评分][设置答案][发布作业][用户验证][修改用户][添加用户][源码查看][历史版本][创建库][分析总结][分类分析][单库分析][进行讨论][发布话题][创建话题]

2.1.1 版本库操作的基本功能

用户可以在本地通过Git工具、Git命令行或者一些开发工具的Git插件将代码同步到我们的服务器。版本库一般通过JLUCODE直接在网上创建,创建时可以对版本库的访问策略进行设置,如限制推送(授权访问、指定用户)、限制克隆,推送以及限制查看,克隆和推送等。用户可以通过Git将版本库提交、同步到平台服务器中,然后平台站点获取服务器中的版本库数据,并以网页形式展示出来。除此以外,具有权限的用户可以查看版本库的各分支的差异,查看指定版本库的提交次数及每次提交的所有源代码。

2.1.2 版本库源代码的分析功能

JLUCODE提供对版本库的源代码行数、有效代码行数(总行数-注释行数-空行行数)等属性进行分析,并且提供同一版本库各分支的数据视图,如图2。除了提供对单个版本库分析,我们还提供对不同开发语言进行分类的分析。这些数据会生成报表,能以PDF格式导出,作为个人求职和升学的佐证。

2.1.3 论坛功能

JLUCODE还提供BBS论坛功能,开发人员及广大用户可以在此互相交流解决疑惑。

2.1.4 教学功能

JLUCODE面向我校师生,我们为师生提供了作业功能。通过JLUCODE,教师在平台发布作业,学生只需将本地代码同步到平台之中,然后将对应源码库设为作业答案源码库即可。

2.2 实现技术

平台前端页面采用框架Bootstrap进行排布设计,结合HTML、CSS等前端技术实现。后台程序以ThinkPHP为框架,以PHP为主要开发语言,通过PHP实现数据的操作,后台与数据库MySQL的连接、查询、编辑等数据交互是通过PDO数据对象来实现。ThinkPHP是一个快速、兼容而且简单的轻量级国产PHP开发框架,诞生于2006年初,原名FCS,2007年正式更名为ThinkPHP,遵循Apache2开源协议发布,从Struts[8]结构移植过来并做了改进和完善,使用面向对象的开发结构和MVC模式[9];然后在服务器搭建Git服务,以使本地Git客户端可正常与服务器通信。后台通过PHP获取服务器中Git的信息,并在前端通过AJAX或者表单请求数据时,将数据返回,并显示在页面中。图3为本平台的技术框架。

3 结束语

代码托管平台弥补了许多开发者对使用版本控制系统上手慢的问题,对于软件开发具有举足轻重的作用,在很大程度上保证程序代码安全的同时,还使身处异地的团队成员可以同步开发,不至影响进度,从而提高开发效率。本文构建的JLUCODE平台不仅解决了上述问题,更是将托管平台服务的开发者市场由社会向高校转移,让众多在校学生接触到代码托管服务,增强版本控制意识。下一步的工作重点是将JLUCODE进行大力推广,让更多的学生了解并学会使用代码托管平台。

参考文献(References):

[1] Wikipedia contributors. Revision Control System [G/OL].

Wikipedia,2015(20150122) [2016-03-30].

[2] C.Micbael Pilato.使用Subversion进行版本控制 [M].开明出

版社,2009.

[3] Eric Brechner.代码之殇[M].机械工业出版社, 2013.

[4] 蒋鑫.Git权威指南[M].机械工业出版社,2011.

[5] 罗力格(Jon Loeliger).Git版本控制管理[M].东南大学出版

社,2010.

[6] 宋冬生.Git——版本管理之利器[J].程序员,2007.11:

118-119

[7] 李云云.浅析B/S和C/S体系结构[J].科学之友,2011.1:6-8

[8] 高宇靖.基于MVC设计模式的Struts框架的探索[D].吉林大

学硕士学位论文,2004.

[9] 李霞.MVC设计模式的原理与实现[D].吉林大学硕士学位论

文,2004.