我们平时使用git的时候,都是我们直接去拉取别人的仓库的代码,然后修改后提交到git服务器去,那如果我们想自己搭建自己的Git服务器该怎么做呢?
建立仓库
首先登录到我们准备用来做服务器的机子上,我这里直接用WSL的Ubuntu 20.04了。如果做过Linux管理的一般知道,我们首先需要给这台Git服务器建立用户组和用户(如果不存在的话),所以我们使用下面的命令:
代码语言:javascript复制- sudo useradd git // 建立名为git的用户
- sudo groupadd git // 建立名为git的用户组
- sudo usermod -G git git // 将git用户添加到git用户组
好,完成上面的基础工作后,我们接下来要建立git的仓库目录。
代码语言:javascript复制- mkdir /home/starxiang/git_test // 建立名为git_test的仓库,此仓库即作为git服务器仓库的根。
建立好目录后,那么接下来我们进入到此目录中,使用下面的命令来建立一个“裸”仓库
代码语言:javascript复制- git init --bare
Initialized empty Git repository in /home/starxiang/git_test/
为什么要加上 --bare 呢,加上–bare代表当前目录下建立的仓库为裸仓库,裸仓库是没有工作区的,因为这是Git的服务器,我们以后使用的时候都是向它提交代码,服务器本身是不需要工作区的。
然后我们希望git的这个根目录对于git用户是可读可写的,所以我们更改下权限
代码语言:javascript复制- sudo chown -R git:git /home/starxiang/git_test/
之后我们再查看下目录下的文件来确认下权限
代码语言:javascript复制- ls -l // 查看当前目录
total 32
-rw-r--r-- 1 git git 23 Dec 1 22:06 HEAD
drwxr-xr-x 2 git git 4096 Dec 1 22:06 branches
-rw-r--r-- 1 git git 66 Dec 1 22:06 config
-rw-r--r-- 1 git git 73 Dec 1 22:06 description
drwxr-xr-x 2 git git 4096 Dec 1 22:06 hooks
drwxr-xr-x 2 git git 4096 Dec 1 22:06 info
drwxr-xr-x 4 git git 4096 Dec 1 22:06 objects
drwxr-xr-x 4 git git 4096 Dec 1 22:06 refs
- ls -l .. // 查看上级目录
total 4
drwxr-xr-x 7 git git 4096 Dec 1 22:06 git_test
然后我们就可以到本地来clone建立的仓库了。
代码语言:javascript复制- git clone git@00.00.00.00 /home/starxiang/git_test
Cloning into 'git_test'...
git@IP's password: // 此处输入密码
warning: You appear to have cloned an empty repository.
这样,我们服务器上的仓库就被拉到本地了,当然,现在里面还没有东西。
RSA认证
我们在上面登录Git服务器的时候,是要输入密码的,但是每次提交的时候都输密码不免非常麻烦,那么我们有没有办法免除输入密码的这个流程呢。
办法是有的,那就是通过rsa认证,生成公钥和私钥,然后把客户端的公钥告诉git服务器。
在我们(客户端)的机器上,打开git bash shell,生成rsa的秘钥对
代码语言:javascript复制- ssh-keygen –t rsa
命令后一路按回车,此时会在c:/Users/starx/.ssh/目录下生成 id_rsa.pub
和 id_rsa
文件,其中 id_rsa.pub
是公钥文件,id_rsa
是私钥文件
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/starx/.ssh/id_rsa):
/c/Users/starx/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/starx/.ssh/id_rsa.
Your public key has been saved in /c/Users/starx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:u40VcA9fatNUwNL6RMoXx1sQt9O5KAzZluOAkRY04HI starx@DESKTOP-T
The key's randomart image is:
---[RSA 3072]----
| .o=o o =o|
| . o o o =oB|
| . E... o* =o* |
| o o* == .o|
| S . *=.. |
| . o... |
| . . |
| = |
| o . |
----[SHA256]-----
然后我们到这个目录里去看看这对密钥长什么样子。首先我们看 id_rsa
然后公钥是以 ssh-rsa 开头的一大长串的字符。
然后我们到服务器上同样的步骤生成密钥,然后在生成密钥的文件夹下,创建(没有的情况下)一个 authorized_keys
的文件
touch authorized_keys
然后把客户端的 id_rsa.pub
的文件内容复制(追加)到这个authorized_keys
文件中即可。之后就不需要每次都输入密码了。