版本控制相信大家都听说过。今天我们要来讲解一下如何在Linux环境下建立起Git Server并且设立多个用户可以远端进行push及pull等操作。
我的演示环境是一个Amazon EC2的instance,安装好了Ubuntu 16.04,并且已经安装有git。
我们想达到的目的是这样的:
建立一个名为/srv/git的文件夹,对于我们当前项目,会有一个相应的my_project.git文件夹,我们可以在本地使用git push origin master或者git pull origin master命令来推送或者取回相应的文件。
首先git是存在多种protocol的,我们使用的是ssh。所以在建立用户的时候,我们需要建立相应的public key及private key,并且将public key添加到服务器端.ssh/authorized_keys文件中(稍后会介绍如何操作)。
首先我们需要建立一个用户git,专门用来远端连接,这样可以限制能够接触到文件的用户:
$ sudo su
$ adduser git
接下来,我们需要建立起.ssh文件夹及相应的authorized_keys文件,用来添加授权用户的public key:
$ su git
git@amazon-server-ip:/home/ubuntu$ cd
git@amazon-server-ip:~$ mkdir .ssh && chmod 700 .ssh
git@amazon-server-ip:~$ touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys
建立文件并且添加了相应的文件权限后,我们需要添加开发者的public key。假设我们需要本地连接git服务器,那么我们需要创建一对public key和private key:
$ cd ~/.ssh
$ ssh-keygen -t RSA -b 2048 -C "Local Developer"
根据提示输入相应的密钥文件名及是否设置密码。
(或者我们可以直接使用Amazon后台建立一对新的密钥。)
然后我们可以看到.ssh文件夹中多出了两个文件,一个无后缀名的文件为私钥,另一个.pub后缀的为公钥。假设我们创建的公钥名称为aws.git.pub,我们需要把公钥中的内容添加到服务器的.ssh/authorized_keys中:
//将aws.git.pub上传到服务器根目录
$ scp -i mykey.pem aws.git.pub ubuntu@amazon-server-ip:~/
//将aws.git.pub中的内容添加到authorized_keys中
ubuntu@amazon-server-ip:~$ sudo cat aws.git.pub >> /home/git/.ssh/authorized_keys
现在我们尝试使用ssh登陆到git@amazon-server-ip:
$ ssh -i ~/.ssh/aws.git git@amazon-server-ip
若显示连接成功,那么我们就可以进行下一步了!
现在我们要建立/srv/git/my_project.git文件夹:
ubuntu@amazon-server-ip:~$ sudo su
root@amazon-server-ip:~$ mkdir -p /srv/git/my_project.git
root@amazon-server-ip:~$ cd /srv/git/my_project.git
root@amazon-server-ip:/srv/git/my_project.git$ git init --bare
Initialized empty Git repository in /srv/git/project.git/
接下来我们需要更改一下文件所属用户:
root@amazon-server-ip:~$ chown -R git: /srv
现在我们就可以在本地使用push将我们的project推送到服务器了:
$ cd my-project
$ git init
$ git add .
$ git commit -m "initial commit"
$ git remote add origin git@amazon-server-ip:/srv/git/my-project.git
$ git push origin master
如果我们需要新增用户,只需要将新用户的public key添加到服务器的/home/git/.ssh/authorized_keys文件中就可以了。