最近发现团队的代码版本管理比较混乱,甚至是根本就没有版本管理的意识,一个项目的源码有时候找个2、3次才找到正确的版本。以前我对这块没做什么特别的要求,只要是大家自己用的顺手,VSS、SVN、TFS都无所谓。考虑到离线工作和以后的非微软开发环境,于是打算用Git来规范统一团队内的版本管理。说到Git,其实GitHub是不错的选择,只不过我们的源码和开发文档与运营商的不少系统都有或多或少的关联,将其放置于互联网上的风险度还是比较高的;基于此,我还是选择搭建自己的Git服务器,将代码、文档、版本信息等存放在自己的内网服务器上,那是最好不过的了。
Dudu的 用开源ASP.NET MVC 程序 Bonobo Git Server 搭建 Git 服务器 ,豁然开朗。恩,这下有戏了,就用它了。这个开源的解决方案现在是V1.1版,已经加入了中文资源文件。
我用的是一台Windows Server 2003,IIS 6 + WebDAV + ASP.Net MVC 3。基本上只要按照部署ASP.NET MVC站点的步骤模式一路走下来,就不会有什么大问题。具体的安装步骤和Git客户端的使用介绍就不多说了,Dudu已经写的很详细了,网上也有大把的TortoiseGit使用教程。我这里只记录下我在配置和使用过程中遇到的一些问题。站点部署完了之后,注意需要给App_Data文件夹赋予写权限,因为SQLite数据库文件、站点的全局配置信息以及错误日志都在这个文件夹下。Bonobo.Git.Server站点能正常运行之后,我们就可以通过Git客户端像使用GitHub一样clone、commit、pull、merge、push等操作自己的版本库了。
在这个过程中,遇到的最大问题是本地版本库无法提交到Git服务器。代码提交到本地没什么问题,但是当Push到服务端的时候,总是提示:fatal: authentication failed:
心想肯定是哪里配置或者设置不对,因为当把版本库勾选中"匿名"的时候,是可以不用输入用户名和密码而能够正确提交到服务端的,但这样一来就无法有效的通过权限和用户名来管理和查看版本信息了。最后终于找到解决方法:在IIS中,把目录安然性 -> 编辑-> 身份验证方法 -> 集成Windows身份验证 去掉,整个上传过程就畅通无阻了;如果不做这样设置的话,我们则需要把每个在Git服务端站点中添加的用户也设置成Window系统的用户(http://forum.chodounsky.net/viewtopic.php?f=11&t=92)。
在登录后的服务端网站中,浏览上传的文件时,会报404错误;在本地开发环境中,浏览及下载文件都很正常。这种情况,我们只要知道它定义的后缀名就很好解决了。Bonobo.Git.Server中浏览文件、下载文件分别定义的是.browse、.download后缀名,于是在 IIS的 主目录 -> 配置 -> 添加 对应的扩展名就可以了:
在使用过程中,我还发现如果版本库的名称中包含中文或者小数点时,会有问题(暂未测试其它特殊字符)。如果包含中文,提交到服务端时会失败;如果包含小数点,连打开这个库的信息页面都会404。。。这些小问题也很好处理,我们可以把包含中文的Git库位置自动转换成HTML编码,可以在新增和修改版本库时自动替换小数点或者其它特殊字符等等
好了,我们终于可以像使用GitHub一样,使用我们自己的Git服务器Bonobo.Git.Server了!团队内测试试运行了2周,运行情况还比较稳定。