Git支持本地(local)、ssh、git和http(s)这四种协议进行传输,本部分将基于ssh协议搭建(此协议不利于开源,适合公司团队使用)。
本文操作大部分在Ubuntu服务器端完成。
1. 安装git
sudo apt-get install git
创建Git用户和用户组
sudo mkdir /var/git ###创建一个文件夹作为git用户的主目录
sudo chown git:git -R /var/git ###让git账户对该文件夹拥有写权限
groupadd git ###创建组
useradd -g git -d /var/git git ###创建用户
命令本省非常简单, 这里要解释的是为什么我们要创建这个git用户,这个用户不是为了运行Git而创建的专职用户,而仅仅是为了SSH访问而创建的。正如我们在前面“SSH协议”一节中提到的地址格式:
git clone user@gitserver:/path/to/my-project.git
这里的“user@gitserver”实质上就是SSH在登入时提供的用户和远程主机的命令行格式,所以说,既然我们需要使用SSH的方式登入并进行数据读写,总归是要有一个登入账户吧?OK,那就创建一个叫git专用账户来专门支持git的数据传输吧。
另外,我们把git用户的home目录设定为了/var/git, 用以区别一般的登入账户。而这个/var/git下,是放置所有repository的理想位置
2. 对于ssh协议,需要安装ssh-server
sudo apt-get install openssh-server openssh-client
安装完成后,需要对ssh服务器的参数进行配置:
$ sudo vim /etc/ssh/sshd_config
找到下面几行,去掉前面”#”注释,并设置:
StrictModes no ##在用户名和其公钥文件名不匹配时将通过验证
RSAAuthentication yes ##使用纯的RSA认证
PubkeyAuthentication yes ##允许Public Key认证
AuthorizedKeysFile %h/.ssh/authorized_keys ##受信任的key文件
上面这个配置是设定免密码登陆的账号公钥存储路径
ps:如果是小团队,把每个人的公钥收集起来放到/home/git/.ssh/authorized_keys文件里问题不大;如果团队较大或是有权限要求,这种方式就很不灵活了,这时可以用Gitosis来管理公钥,我将在后文介绍。
接着重启ssh服务
$ sudo service ssh restart
或是
$ sudo /etc/init.d/ssh restart
ssh服务器到这里安装配置完毕。
3. ssh公私钥配置
首先配置服务端的公私钥:
ssh-keygen -t rsa
填写相应的信息后,默认会在主目录的.ssh隐藏文件夹下生成公私钥对:
id_rsa ##私钥
id_rsa.pub ##公钥
在.ssh目录下建立一个authorized_keys文件,用来记录受信任的客户端公钥:
touch authorized_keys
客户端同样通过ssh-keygen生成公私钥,并将公钥文件发给git服务器,如client_rsa.pub, git服务器将其内容追加到authorized_keys下
cat client_rsa.pub >> authorized_keys
4. 仓库的建立及拉取
服务器端建立工程并初始化project
su git
cd ~/
mkdir Project.git
cd Project.git
git --bare init
客户端通过ssh协议拉取
git clone git@192.168.21.6:/var/git/Project.git
cd Project
touch README.md
echo "this is a readme file" >> README.md
git add .
git commit -m "first commit"
推送到服务器
git remote add origin git@192.168.21.6:/var/git/Project.git ##添加远程仓库地址
git push origin master ##推送
至此,一个供公司内部开发的git服务器搭建完成