在安装之前我们有必要先了解一下什么git。Git是一个分布式版本控制软件,每一个安装git的服务器或者电脑,他们的本质其实都是一样的,可以互相进行通信,是去中心化的,而我们为了方便于管理,我们采取了中心化的管理,我们指定搭建在服务器的git作为主终端,类似于一个主节点,统筹版本,其他终端均受制这个主节点。
安装步骤
安装环境:Centos 7,使用用户:root。
注:#代表root登录,$ 代表某个用户登录
安装Git
安装git
# yum install git -y
设置用户
如果你熟知git的使用,那么一定很清楚我们平时的使用习惯,我们通常会通过git拉取服务端的项目,完成修改后再提交给服务端,我们的工作不会通过Xshell此类的软件ssh到服务器再操作,我们更常见的使用IDEA,小乌龟,或者SourceTree来操作提交,更新。所以为了隔离我们的使用以及服务器的安全,我们应该独立一个用户来管理这部分的数据。
创建一个git用户组
# groupadd git
创建一个用户,并指定他的home目录
# useradd gitStone -g git -d /home/gitStone
附注:useradd
命令
-g<群组>:指定用户所属的群组;
-d<登入目录>:指定用户登入时的启始目录;
创建证书登录
$ su gitStone
$ cd ~/
创建密钥对文件,输入以下命令,一路回车:
$ ssh-keygen -t rsa
将生成的公钥文件重命名为
$ cd .ssh/
$ mv id_rsa.pub authorized_keys
便于区分,也将私钥文件重命名
$ mv id_rsa id_rsa_perfree.pem
将目录.ssh权限设置为700,公钥文件authorized_keys设置为644
$ chmod 700 ../.ssh/
$ chmod 644 authorized_keys
这个是git里面比较特殊的一步操作,通信的时候,客户端与服务器需要一个证书进行验证。我们作为客户端也需要生成一个证书,放置到git服务端的/home/gitStone/.ssh/authorized_keys
文件里。
在【个人电脑】上生成自己的一个公钥,首先安装Git,下载地址:git,右键git bash here
进行操作:
ssh-keygen
无脑回车,注意看一下生成到那个目录下去了,或者最简单的办法装个everything,查找一下这个文件也不失为一个好办法。
打开id_rsa.pub
文件,复制里面的内容,另起一行粘贴,如果有多个用户,把他们的公钥一行一个粘贴进去。
使用证书,主要是为了无需密码就可以提交代码,具体请看《使用SSH证书远程登陆你的服务器》。
初始化仓库
创建建一个目录作为Git仓库,服务器上的Git仓库通常都以.git结尾,所以我们假定为/home/gitStone/project.git
$ cd /home/gitStone/
初始化仓库
$ git init --bare project.git
Initialized empty Git repository in /home/gitStone/project.git/
设置密码并关闭ssh
我们不希望这个用户通过ssh连接到服务器,所以为了安全起见,我们禁用掉ssh,只能通过git shell交互。
上面我们的操作都在gitStone
这个用户权限基础上操作,现在我们需要切回root
用户
$ su root
切回root
后,修改如下文件:
# vi /etc/passwd
如果你在新增之后没有再加用户,一般来说在最后一行你会看到类似如下的配置:
gitStone:x:1002:1002::/home/gitStone:/bin/bash
将他修改为
gitStone:x:1002:1002::/home/gitStone:/bin/bash/git-shell
【其实就是在末尾加上 /git-shell
】
如上之后你还会发现我们貌似还没给这个用户添加密码呢,添加密码:
# passwd gitStone
本地clone 仓库
打开你想存放仓库的目录,右键git bash here
ssh非22端口的:
git clone ssh://gitStone@hostname:port/home/gitStone/project.git
22端口:
git clone gitStone@hostname:/home/gitStone/project.git
我使用的ssh是非22端口,所以执行如下:
$ git clone ssh://gitStone@hostname:port/home/gitStone/project.git
Cloning into 'project'...
warning: You appear to have cloned an empty repository.
整点活
正好我在本地在整一个Java配置的Spring小Demo,我把这个项目放到这个目录下,再用IDEA打开看看。
IDEA识别到了我们的文件有版本控制了,所有的文件都变红了,VCS也有了git。
我们下一篇就用这个项目来实操一下IDEA里的git使用!
权限处理
如果只是个人或者几个人开发,基本上这样子就足够了,但是如果是多人开发,可以考虑上Gitolite 或者Gitlab
GitLab 可以说是 GitHub 的开源版本,一开始是使用 Gitolite 作为授权管理的解决方案,后来因为两个项目的开发和同步等方面出现问题,在 2013 年 2 月,GitLab 宣布与 Gitolite 分道扬镳。总之,GitLab 是一个重量级的版本,要使用它,你需要安装很多额外的软件,如 PostgreSQL, Redis, Sidekiq, Unicorn, nginx 和 gitlab-shell 等。所以说,它是资源密集型的,但功能确实强大,也更有利于开发团队的高效率协作,比较适合大型团队。
参考
https://learnku.com/articles/2859/use-gitolite-to-build-git-server