SSH连接
1、git下载
$sudo apt-get update $sudo apt-get install git
2、生成SSH公钥(开发端)
大多数Git服务器都会选择使用SSH公钥来进行授权。系统中的每个用户都必须提供一个公钥用于授权,没有的就要需要生成一个。一般SSH公钥默认存储在账户的主目录下的~/.ssh目录。
$ssh-keygen
第一次是让你设置公钥文件的位置和公钥文件名,后面两次是让你甚至公钥连接的密码,可以不设置密码则默认不设置密码。
3、架构服务器(Ubuntu远程服务器端)
1)创建一个操作git仓库的用户
$sudo adduser git
2)创建存放SSH公钥的管理文件
$su git $mkdir ~/.ssh $cd ~/.ssh $touch authorized_keys
3)将开发者的SSH公钥添加到git用户的authorized_keys文件中。
$cat /tmp/id_rsa.pub >> ~/.ssh/authorized
4)创建一个git裸库
$mkdir /opt/git $cd /opt/git $mkdir project.git $cd project.git $git --bare init
5)开发者操作提交(管理员)
$cd project $git init $git commit -a -m "initial project" $git remote add origin git@servername:/opt/git/project.git $git push origin master
6)一般开发者
$git clone git@servername:/opt/git/project.git
将项目clone下来就可以对其进行操作了。
7)限制git用户的活动范围
若是未禁止git的shell登录权限的话,开发者可通过git用户权限(ssh协议)直接访问服务器
$ssh git@servername $vi /etc/passwd
会看到git的用户信息git:x:1002:1002:git,,,,git:/home/git:/bin/bash,将其改为
git:x:1002:1002:git,,,,git:/home/git:/usr/bin/git-shell
如此,git用户就只能用ssh连接来推送和获取git仓库,而不能直接使用主机shell.尝试普通SSH登录,会直接拒绝。
公共访问
可以通过匿名的方式对git仓库进行读操作。或许对小型的配置来说最简单的办法就是运行一个静态的web服务。把他的根目录设定为Git仓库所在的位置,然后开启post-update挂钩(每当当前的仓库进行提交更新的时候,server就会执行hooks/post-update脚本命令)。基本步骤如下所示:
1、建立一个git 裸仓库
$mkdir publicaccess.git $cd publicaccess.git $git --bare init
2、打开post-update挂钩
$mv hooks/post-update.sample hooks/post-update $sudo chmod a+x hooks/post-update
git1.6之前版本,可省略mv操作,挂钩加后缀名.sample是之后版本才添加的
3、安装apache2,搭建web环境
$sudo apt-get install apache2 $vi /etc/apache2/apache2.conf
添加一个git裸仓库目录,如:
+ + Options Indexes FollowSymLinks + AllowOverride None + Require all granted +
$vi /etc/apache2/sites-enabled/000-default.conf
修改网页根目录,修改如下:
ServerAdmin webmaster@localhost + ServerName enjoytoday.cn + DocumentRoot /home/git ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined
4、设置git仓库权限,并重启apache服务
$sudo chown -R git:www-data publicaccess.git $/etc/init.d/apache2 restart
重启apache2服务
5、读取git项目
$git clone http://enjoytoday.cn/publicaccess.git
如此就可成功让人读取你的git项目了
GitWeb
为了使得我们可以得到一个更好的访问方式,我们可以通过gitweb实现一个简单的web界面的访问。具体的实现有两种方式,一种是通过git自带的gitweb的CGI脚本来实现,还有一种是通过网页服务软件(gitweb软件包)来实现,具体实现方法如下:
1、通过git命令实现
此种方法需要先下载一个lighttpd工具
$sudo apt-get install lighttpd
安装过后,该服务会自动启动,然后就是开启gitweb服务,在git项目下
$git instaweb
会自动开启一个当前网页1234端口的一个gitweb网页,如果是本地即http://127.0.0.1:1234展示git项目
关闭服务可使用
$git instaweb --stop
2、安装gitweb软件包
如果需要为团队或者某个开源项目长期运行 GitWeb,可以使用gitweb安装包安装实现网页服务。
$git clone git://git.kernel.org/pub/scm/git/git.git $cd git/ $make GITWEB_PROJECTROOT="/opt/git" \ prefix=/usr gitweb/gitweb.cgi $sudo cp -Rf gitweb /var/ww/
通过指定 GITWEB_PROJECTROOT 变量告诉编译命令 Git 仓库的位置。然后,设置 Apache 以 CGI 方式运行该脚本,添加一个 VirtualHost 配置:
ServerName gitserver DocumentRoot /var/www/gitweb Options ExecCGI FollowSymLinks SymLinksIfOwnerMatch AllowOverride All order allow,deny Allow from all AddHandler cgi-script cgi DirectoryIndex gitweb.cgi
注意需要在apache2的端口配置文件/etc/apache2/ports.conf中添加对8080端口的监听。添加如下:
Listene 8080