git实在是太好太好用的版本控制工具。本文介绍使用ssh在局域网内部署git,实现局域网范围内代码的版本控制,和团队协作。服务器和客户端都是基于ubuntu的。



服务器

  1. 准备一台ubuntu作为服务器,建一个专用账户,命名为git,设置密码。然后登录。
  2. 安装git,在ubuntu的命令行下允许以下命令
    apt-get install git-gui
  3. 安装ssh服务
    apt-get install openssh-server
  4. 建立一个git仓库,用于后面的试验
    mkdir ~/projectName.git
    git --bare init


客户端

  1. 客户端也以ubuntu为例。
  2. 测试ssh连接,服务器的ip以192.168.1.100为例
    ssh git@192.168.1.100
    不出意外,应该能连上服务器,这是后面的保证。
    测试好ssh连接后,退出
  3. 安装git
    apt-get install git-gui
  4. 克隆git仓库
    mkdir ~/work
    git clone ssh://git@192.168.1.100/home/git/projectName.git
    会提示输入密码,然后开始克隆。
    完成后,在~/work/projectName目录下就有克隆的git仓库了。
    这个目录下什么文件都没有?当然什么都没有,因为还没有添加文件。
    可以添加文件,修改,然后用git进行提交。
    再用git push推送到git服务器。


免密码

每次用git命令要连接服务器的时候,都会提示输入密码,稍现麻烦。可以免密码。

  1. 生成ssh密钥
    在需要免密的客户端,运行命令git gui打开git gui。
    打开菜单:帮助 -> show ssh key -> generate key
    拷贝生成的ssh密钥。
  2. 在git服务器端,打开文件~/.ssh/authorized_keys
    然后把上面拷贝的ssh密钥粘帖上去,保存。

用这台客户端访问git服务器就不需要密码了。



安全问题

每个客户端都有git服务器的密码,都可以随意访问git服务器的话,会有安全问题。如果希望客户端能访问git服务器的仓库,但又不能随意登陆git服务器做其他的操作。首先,要完成上面的免密操作;再者,禁用ssh的shell登陆。

在服务器上打开/etc/passwd文件,找到类似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
修改为:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样,git用户可以正常通过ssh使用git,但无法登录shell。