本文是对 廖雪峰官方网站 - 搭建Git服务器 的实践。
常用的git使用方法 GIT CHEAT SHEET。
我是用我的云服务器来作为Git服务器的。有一点需要注意,使用的是该云服务器的公网ip
哦。
# ubuntu系统
~$ sudo apt-get install git
# centos系统
~$ sudo yum install git
git用户是专门用来运行git服务的。
~$ sudo adduser git
将所有需要用到这个Git仓库的用户的SSH
公钥保存到Git服务器中的/home/git/.ssh/authorized_keys
。刚开始.ssh这个目录可能并不存在,创建一个就行了,然后把所有用户的公钥(通常为/home/用户名/.ssh/id_rsa.pub
)保存在authorized_keys
文件中即可。
若你的电脑中没有/home/用户名/.ssh/id_rsa.pub
,那么需要生成。
~$ ssh-keygen -t rsa -C "[email protected]"
首先,要明白的是,Git仓库到底是个什么东西? 归根结底就是一个目录而已。
创建一个/home/git/myGitServer/sample.git
目录作为一个仓库。
~$ sudo git init --bare sample.git
通过--bare
参数创建的是一个裸仓库。裸仓库就是没有工作区的仓库。这是因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾。
修改sample.git目录的权限
~$ sudo chown -R git:git sample.git
为什么要禁用shell
登录?这是出于安全方面的考虑。git用户应该只允许使用git-shell
,而不能使用/bin/bash
。在/etc/passwd
文件中找到git用户,把/bin/bash
直接修改成/usr/bin/git-shell
。
~$ sudo vim /etc/passwd
# 将 git:x:1001:1001:,,,:/home/git:/bin/bash 改为
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
这样git用户可以正常通过ssh使用git(因为git push
,git pull
这些操作都是基于ssh协议的),但无法登录shell。
现在就可以将这个Git服务器当作github来使用了。在你的电脑上使用git来克隆服务器上的sample.git中的代码。
sjl@DESKTOP-BL7A7IA:~$ git clone git@Git服务器的ip:/home/myGitServer/sample.git
Cloning into 'sample'...
[email protected]'s password:
warning: You appear to have cloned an empty repository.
让我们用ssh来连接看看
sjl@DESKTOP-BL7A7IA:~$ ssh [email protected]
[email protected]'s password:
Last login: Wed Jun 10 18:33:37 2020
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to x.113..189.175 closed.
很明显,使用git用户登录失败了,那么使用root用户试试呢
sjl@DESKTOP-BL7A7IA:~$ ssh [email protected]
[email protected]'s password:
Last failed login: Wed Jun 10 20:51:31 CST 2020 from 218.85.119.92 on ssh:notty
There were 278 failed login attempts since the last successful login.
Last login: Wed Jun 10 18:33:52 2020 from 106.39.148.254
登录成功了。
现在可以将该仓库作为的你的远程仓库使用了。
~$ git remote add mygithub git@Git服务器的ip:/home/myGitServer/sample.git
~$ git remote
mygithub
如果不需要私有的Git服务器,那么直接使用Github就好了,如果嫌Github网速慢,使用国内版 Gitee
要方便管理公钥,用Gitosis;
要像SVN那样变态地控制权限,用Gitolite。
有些同学可能还知道另外一个代码托管网站 GitLab,那么GitLab和GitHub有啥区别呢?
下面这一段来自博客 GitHub与GitLab的区别以及GitLab的搭建与使用
GitLab和GitHub一样属于第三方基于Git开发的作品,免费且开源(https://github.com/gitlabhq/gitlabhq 基于MIT协议),与Github类似,可以注册用户,任意提交你的代码,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服务器上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发,你总不可能把团队内部的智慧总放在别人的服务器上吧?简单来说可把GitLab看作个人版的GitHub。
我们前面所搭建的Git服务器,只能push,pull代码,没有其他注册用户等功能,说直白点就是没有一个像GitHub这样的网站来管理,因此才需要用到GitLab。要搭建GitLab还是参考这篇博客 GitHub与GitLab的区别以及GitLab的搭建与使用
[1] 廖雪峰官方网站 - 搭建Git服务器
[2] Git官方网站的Book教程 可以选择中文哦
[3] GitHub与GitLab的区别以及GitLab的搭建与使用