前段时间一直在用google code,大概了解了svn的使用方法(其实也没有怎么了解,因为使用了eclipse的svn插件,没有手动使用svn命令过)。想在家里的龙芯上也弄个版本管理软件,这样既可以控制平时写的软件的版本,同时也实现了对这些程序的备份。
以前在自己的电脑上搭建过svn服务器,所以这次想尝试一下搭建git的服务器。git是分布式的版本控制软件,因此本身没有很强的服务器概念。因此选择了gitosis这个软件。
安装这个软件非常方便,直接用apt-get就可以了,很久没有刷新软件源了,导致第一次安装没有成功,重新刷新一下就好了。安装完之后,按照http://en.gentoo-wiki.com/wiki/Gitosis这篇wiki的指示配置gitosis。不过其中有一点需要说明的是,debian安装的gitosis创建的组和用户都是gitosis,因此wiki上描述的远程路径帐户名都要改为gitosis。
在本地用ssh-keygen生成一对密钥对之后,把公钥上传到龙芯上,然后用那把公钥初始化版本库,这样我这台电脑就是这个版本库的拥有者了。初始化之后,就可以通过gitosis账户远程clone一个gitosis-admin.git版本库,里面有账户和代码库的设置,修改之后,先commit到本地,然后再push到远程版本库中。
在安装gitosis之前,apt建议我安装git-daemon-run和gitweb两个包,那就试试看好了。前面那个包好像是用runit程序进行管理的,现在还不清楚是怎么控制开启和关闭(在/etc/init.d文件夹下没有服务脚本),修改一下/etc/sv/git-daemon/run文件,把git-daemon启动参数改掉,其中的base-path改为版本库的路径,我这里是/srv/gitosis/repositories(gitosis账户的家目录是在/srv/gitosis),最后加上--export-all暴露所有的版本库。
然后安装gitweb,安装也很方便,配置起来麻烦了点。因为不会弄apache的虚拟主机,所以直接在原来的默认主机里进行配置。把gitweb安装在/usr/lib/cgi-bin中的gitweb.cgi复制到原来配置的cgi-bin路径(我这里是/srv/sgi-bin),把/usr/share/gitweb下的图片和css文件复制到apache默认主机的根目录(我把它们复制到了/srv/www/git文件夹下)。然后配置/etc/gitweb.conf,其中的$projectroot改为版本库的根路径(我这里是/srv/gitosis/repositories),所有图片和css文件的路径前面加上了"/git"(因为我把它们放在了默认主机的根目录下的git目录中)。最后修改apache的配置,debian的默认主机配置文件是/etc/apache2/sites-enabled/000-default,在虚拟主机项目下增加:
SetEnv GITWEB_CONFIG /etc/gitweb.conf
这样apache会去读取gitweb的配置文件,设置好相应的环境变量。
[cc lang='apache' escaped='true'' ]
<Directory "/srv/www/cgi-bin/gitweb">
Options FollowSymlinks ExecCGI
Allow from all
AllowOverride all
Order allow,deny
<Files gitweb.cgi>
SetHandler cgi-script
</Files>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
[/cc]
[cc lang='apache' escaped='true'' ]
这段从网上抄来的设置,应该是改写url用的吧。
<Directory "/srv/gitosis/repositories">
Allow from all
</Directory>
[/cc]
这个应该是设置可以访问版本库根文件夹,但是这个设置好像没有用。
重新启动apache,访问xxx/cig-bin/gitweb.cgi,但是显示的是403错误,没有权限访问。不清楚为什么会这样,把整个版本库根文件夹访问权限改为755就可以显示了。
最后照着样子自己本地初始化git版本库,然后放到远程的版本库中。初始化是成功的,在gitweb页面中也可以看见。但是修改之后commit,然后再push的时候,报错project description file hasn't been set。这个不知道怎么解决,网上搜索了下,说是要同时修改本地和远程的描述文件(.git/description),然后的确是可以提交了。先尝试到这里,以后继续。。。