在开始假设Git服务器前,需要将现有仓库导出为裸仓库
$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.
现在my_project.git 目录应该有Git目录的副本,整体效果等同于
$ cp -Rf my_project/.git my_project.git
将裸仓库放到服务器上
假设域名为git.example.com 的服务器已经架设完毕,并可以通过SSH连接。
而所有的Git仓库都需要放在/opt/git 目录
$ scp -r my_project.git user@git.example.com:/opt/git
如果,连接服务器的用户对/opt/git 目录有可读权限,现在通过SSH协议就可以克隆远程仓库
$ git clone user@git.example.com:/opt/git/my_project.git
如果对/opt/git/my_project.git 目录拥有可写权限,则可以自动拥有推送权限。
如果到该项目目录中运行git init 命令,并使用--shared 选项,则Git会自动修改仓库目录的组权限为可写
$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared
SSH连接
如果要为团队每个成员提供访问权,也就是建立git账户,为每个需要写权限的用户发送SSH公钥,并将其加入git账号的~/.ssh/authorized_keys 。
或者是让SSH服务器通过某个LDAP服务,或者是其他已经设定好的集中授权机制,进行授权。只要每个用户互殴的主机的shell访问权限,任何SSH授权机制都可视为有效。
SSH公钥
许多Git服务器都需要使用SSH公钥进行认证,如果某系统用户尚未拥有密钥,需要为其生成一份。默认,用户的SSH密钥存储在~/.ssh 目录,查看是否已经拥有密钥
$ cd ~/.ssh
$ ls
authorized_keys2 id_dsa known_hosts
config id_dsa.pub
其中,.pub 文件就是公钥,与之名称相对的是四月。如果找不到这样的文件,可以通过ssh-keygen创建它们。
在Linux/Mac中,ssh-keygen是SSH软件包提供的;在Windows中,则由MSysGit提供
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/schacon/.ssh/id_rsa):
Created directory '/home/schacon/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/schacon/.ssh/id_rsa.
Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.
The key fingerprint is:
d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 schacon@mylaptop.local
ssh-keygen会确认密钥存储位置,并要求输入两次密钥口令(可以留空),.pub内容
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== schacon@mylaptop.local
将密钥提交给Git服务器管理员,它会加入授权文件中。
配置服务器
为配置服务器端的SSH访问,需要使用authorized_keys 对用户认证。
首先创建git用户,并为其建立.ssh目录
$ sudo adduser git
$ su git
$ cd
$ mkdir .ssh && chmod 700 .ssh
$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
为系统用户git的authorized_keys 文件添加开发者的SSH公钥
$ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.josie.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.jessica.pub >> ~/.ssh/authorized_keys