Ubuntu安装git服务端

windows wsl ubuntu安装git服务

基础安装

下载安装git

  • 安装git
$ sudo apt-get install git-all     

说明:如果安装过程出现找不到包的错误:
E: Unable to locate package git-all
请执行 sudo apt-get update 进行linux仓库更新

  • 验证git安装成功
$ git --version
  • 创建git系统用户
$ sudo adduser git

git用户创建完成后使用ll /home查看,发现其下已存在git用户目录

在git服务器上生成SSH公钥

  • 切换至git用户
$ su git
  • 使用ssh-keygen生成ssh公钥
$ ssh-keygen -o
  • 退出git用户,使用ssh-keygen重复上一步骤为当前用户生成ssh公钥,之后使用如下命令将当前用户公钥加入git用户,进行ssh免密处理
$ ssh-copy-id -i ~/.ssh/id_rsa.pub git@localhost

执行以上命令出现Connection refused时,说明ssh服务未启动,使用sudo service ssh start启动ssh服务,如果启动ssh服务失败说明系统未安装openssh-server或者openssh-server版本有异;先使用sudo apt-get purge --remove openssh-server移除系统默认openssh-server,使用sudo apt-get install openssh-server重新安装,安装完成后使用sudo service ssh start启动ssh服务,然后再执行ssh-copy-id命令;

  • 检测ssh远程连接是否可用
$ ssh git@localhost

初始化git仓库

  • 创建git仓库目录
$ sudo mkdir /mnt/gitrepository
$ sudo mkdir /mnt/gitrepository/myproject.git
  • 在myproject.git目录中执行仓库初始化
$ sudo git init --bare
  • 给git仓库目录权限授予git用户
$ sudo chown -R git /mnt/gitrepository/myproject.git

禁用git用户的普通shell权限

借助git-shell工具,可以方便的将用户git的活动限定在Git相关范围内

$  which git-shell #查看位置,默认在/usr/bin/git-shell
$ sudo -e /etc/shells #此命令会打开系统shell脚本,将git-shell完整路径追加到文件中

使用 chsh -s 命令修改任一系统用户的 shell:

$ sudo chsh git -s $(which git-shell)

这样,用户 git 就只能利用 SSH 连接对 Git 仓库进行推送和拉取操作,而不能登录机器并取得普通 shell。 如果试图登录,你会发现尝试被拒绝,像这样:

$ ssh git@localhost
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to localhost closed.

windows客户端配置验证

  • 下载并安装git
  • 创建gitworkspace目录作为本地仓库,然后进入目录中,右键打开Git Bash Here
  • 在git命令行中生成客户端ssh公钥
$ ssh-keygen.exe -o
  • 将生成的公钥配置到远程git用户authorized_keys
$  ssh-copy-id -i /c/Users/administrator/.ssh/id_rsa.pub git@localhost
  • clone远程仓库
$  git clone git@localhost:/mnt/gitrepository/myproject.git
  • 在本地仓库myproject中创建一个空文件,随便填写点儿内容,将新文件提交到git仓库中并push到远程仓库
$ git add aaa.txt
$ git commit -am "新建文件"
$ git push
  • 验证提交到远程仓库中的内容:在gitworkspace的同级目录中新建gitworkspace1,然后进入gitworkspace1目录,将远程仓库clone到本地,查看clone出的项目,发现项目下已经存在aaa.txt文件

Smart HTTP 及 Git Web安装配置

Smart HTTP安装配置

设置 Smart HTTP 一般只需要在服务器上启用一个 Git 自带的名为 git-http-backend 的 CGI 脚本。 该 CGI 脚本将会读取由 git fetchgit push 命令向 HTTP URL 发送的请求路径和头部信息, 来判断该客户端是否支持 HTTP 通信(不低于 1.6.6 版本的客户端支持此特性)。 如果 CGI 发现该客户端支持智能(Smart)模式,它将会以智能模式与它进行通信, 否则它将会回落到哑(Dumb)模式下(因此它可以对某些老的客户端实现向下兼容)。

  • 安装apache2
    使用 Apache 来作为 CGI 服务器。 如果你没有安装 Apache,你可以在 Linux 环境下执行如下或类似的命令来安装:
$ sudo apt-get install apache2 apache2-utils
$ a2enmod cgi alias env

该操作将会启用 mod_cgimod_aliasmod_env 等 Apache 模块, 这些模块都是使该功能正常工作所必须的。

接下来需要将git仓库所在目录的用户组设置为www-data,这样 Web 服务器才能读写该仓库, 因为运行 CGI 脚本的 Apache 实例默认会以该用户的权限运行:

$ sudo chgrp -R www-data /mnt/gitrepository #将目录授权给组www-data
$ sudo chmod -R g+w /mnt/gitrepository/ #设置目录为组www-data可写可读
  • 配置Apache2,进入/etc/apache2目录
$ sudo vim apache2.conf

添加如下内容:

SetEnv GIT_PROJECT_ROOT /mnt/gitrepository  #此处为git仓库所在目录
SetEnv GIT_HTTP_EXPORT_ALL
ScriptAlias /gitrepos/ /usr/lib/git-core/git-http-backend/
ScriptAlias /repos/ /usr/lib/git-core/git-http-backend/
<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /mnt/gitrepository/.htpasswd
    Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)
    Require valid-user
Files>
  • 启动apache2服务
$ sudo service apache2 start
  • 创建一个包含所有合法用户密码的 .htpasswd 文件
$ sudo htpasswd -c /mnt/gitrepository/.htpasswd zhangsan
  • 验证smart http
    在windows客户机上,创建一个新的目录gitworkspace2用以验证Smart HTTP,进入新目录后使用打开git命令行,在命令行中执行:
$ git clone http://localhost/gitrepos/myproject.git

进入clone下来的项目目录,编辑已存在的文件,然后提交推送至远程

$ cd myproject
$ vim aaa.txt
$ git commit -am "新增一行001"
$ git push

当进行到git push命令时,会提示输入用户名/密码,此时输入上面步骤中创建的zhangsan用户,即可正确将修改的文件推送到远程

提示: 如果要限制clone权限则需要在配置apache时>将 Require expr !(%{QUERY_STRING} -strmatch '*service=git-receive-pack*' || %{REQUEST_URI} =~ m#/git-receive-pack$#)去掉

Git Web安装配置

  • 安装gitweb,默认情况下执行apt-get install git-all时已经安装了gitweb,如果未安装,则执行以下命令:
$ sudo apt-get install gitweb
  • 配置gitweb到apache
    gitweb的cgi脚本目录为/usr/share/gitweb,因此在apache配置中需要以以下方式配置:
  Alias /gitweb /usr/share/gitweb

  Redirect permanent /repos /gitweb

  
    Options +FollowSymLinks +ExecCGI
    AddHandler cgi-script .cgi
    AuthType Basic
    AuthName "Retricted Files"
    AuthUserFile /mnt/gitrepository/.htpasswd
    Require valid-user
  Directory>

配置gitweb访问的git仓库目录,编辑/etc/gitweb.conf文件,找到$projectroot属性,将其值更改为你的git仓库所在目录,eg:/mnt/gitrepository

  • 重启apache服务,在浏览器中查看http://localhost/repos,输入用户名密码即可在浏览器中查看git仓库提交记录

你可能感兴趣的:(linux,linux,git)