如何搭建一个个人私服 Git
服务器的环境是 ubuntu 20.4 ,我是使用个人笔记本自带的终端进行搭建的。
其实 git 私服就是在服务器中创建了一个名字叫 git 的用户,然后我们使用 git 指令让本机和服务器进行文件传输,git 指令可以帮助我们进行版本控制
1.首次登录阿里云
一开始时我们的服务器密码是阿里云随机生成的用起来比较麻烦,所以可以直接重置密码。
2.使用 ssh 登录
ssh root@IP地址
3.更改主机名
@ 后面显示的就是 hostname,有点长
root@iZuf6dyodvhcv8ku8txmo5Z:~#
使用指令:
以下是在 vim 环境下更改的
vim /etc/host
4.安装 git 指令
先看一下是否有安装 git

没有办法安装,因为 apt 不是最新的

检查 apt 哪些包要更新:
sudo apt updata
更新所有包
sudo apt upgrade
5.创建 git 用户和服务器进行免密连接
sudo adduser git
这个指令就是 linux 中的 useradd 指令,只不过会有一些信息需要填写。相当于在服务器中又创建了一个 user 名字叫 git ,虽然这个名字可以自定义,保险点最好还是别了
需要填写基本信息:

(1)产生密钥
然后需要进入 git 这个用户,将所有的要保存的信息都安装到这个用户下。因为默认是在 root 用户下的,如果用 root 的权限在 git 用户的存储空间中创建一些文件会导致 git 用户没有办法操作一些文件,所以要确认一下是在 git 用户下
su git
要想免密登录服务器就要在自己电脑中生成 ssh 密钥,以及证书。然后将自己电脑的 ssh 密钥放到服务器中,这样服务器就可以知道我的 电脑是安全的。
在自己电脑中输入以下指令:
连接过 github 的应该对这个指令比较熟悉了,我们在用这个指令生成 ssh 密钥后会生成一个文件,将这个文件的内容拷贝到 github 中,他俩的效果是差不多的。就是让对方相信自己。
ssh-keygen
可以使用 -t 参数来对密钥加密

(2)将生成的密钥文件拷贝到服务器
这里要将 .pub 文件拷贝到服务器的 .ssh/aythorized 文件中。实现两个主机通信的方法有很多,这里使用的是 scp 远程连接指令
scp xu_rsa.pub git@1**.***.***.***:~/.ssh/authorized_keys
scp 指令的格式如下:
scp 本机文件名 服务端用户名@IP地址:服务器目标地址
下图是实现命令:

(3)更改本机 config 配置文件
因为刚刚更改了本来默认的密钥名 id_rse 所以要在服务器中配置一下,否则它还是使用 id_rsa 登录验证。只需将下图的三行写入本机 ~/.ssh/config 文件就可以
Host 是服务器的 IP ; User 是所要登录服务器的用户名;最后是验证文件也就是密钥文件的地址

(4)实现无密连接服务器
在本机命令行输入 。
ssh IP地址
这样我的电脑就可以使用 git 这个无密的访问我的服务器了

6.创建远程库
在 /srv 文件夹下创建库。这个是买阿里云服务器时本来就创建好的,我在这个文件夹下创建了一个 hello 的文件夹,然后我们要初始化这个 git 文件夹为一个裸库

7.将服务器的文件 clone 到本地
因为在远程已经创建库了所以下一步就将服务器的文件 clone 到本地
git clone git@139.196.229.191:/srv/hello/hello.git
git clone 指令:
git clone 用户名@IP地址:.git 文件的地址
因为我们刚才已经可以无密的用 git 的用户登录进服务器,所以这里直接将用户名省略掉只用 IP 地址访问就好了

最后就可以看到在本机的桌面上有了这个文件
8.使用 git add 向服务器添加一个文件
本机上的库叫 workplace 工作区,我们需要将 workplace 的文件上传到 Remote。下面的指令就类似于我们往常向 github 传输指令的操作

(1) 在 Remote 端创建 hello.git 文件夹
我们需要将我们想要托管的代码上传到 git 用户的 hello.git 文件夹中。当然这个文件夹叫什么名字都好,只不过为了和 github 上的命名方式同一就叫其 xxx.git
mkdir hello.git
然后初始化这个库
git init --bare
参数 --bare 的意思是创建一个裸库
(2)本地 hello 文件夹下初始化 .git
我们需要将本地文件夹 hello 及其里面的内容 push 到 hello.git 中,当然这个名字也是随便取得,因为在最后我们会指定 workplace 和 remote 的地址。
git init

这里模拟在本地 hello 中放一个 txt 文件,然后上传到服务器,所以在本地的 hello 文件夹内创建一个 hello.txt 文件。其中 touch 指令是 Linux 创建文件的指令
touch hello.txt
(1)将 hello.txt 文件添加到 Index
git add hello.txt
(2)将文件提交 Repository 中
git commit -m '备注信息'
-m 就是添加一个 message 备注信息

(3) 先将代码 remote 到源上
将 Repository 的代码 push 到 Remote 中
git remote add origin IP 地址:hello.git
(4)将代码 push 到服务器中
origin 是远程地址,master 是本地地址
git push -u origin master
(5) 验证是否将代码上传到服务器
就是再将上传的代码下载到本地看看里面是否有 hello.txt 文件,这里需要使用 clone 指令
首先先删除原先创建的 hello 文件,因为要将新文件传入了。如果 hello 文件里面有很多内容的话删除时会不断提示需要删除的文件,所以这里使用管道删除所有文件
yes | rm -r hello
然后使用 clone 指令将服务器上的文件下载到本地
git clone git@ip 地址:源文件地址
要是自定义了登录的用户也可以输入 ip 地址登录,可以不用指定登录的用户
git clone ip地址:源文件地址

然后进入到本地下载文件的地址就可以看到 hello 文件夹和里面的 txt 文件啦

话说我这服务器带宽有点慢啊
其他参考资料: