云服务器搭建git仓库

在实际的开发中,都是一个团队协同开发,共享代码资源。那么就需要服务器来存放团队的代码,需要用的时候从服务器下载。首先找一台电脑充当服务器的角色,每天 24 小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。可以自己搭建这台服务器,也可以使用 GitHub、Gitee 等作为 Git 服务器。

image-20220825071410475

本文以百度智能云服务器debian为例,root 角色进行操作。

安装 Git

1
2
3
4
5
$ apt update
$ apt upgrage
$ apt install git
# 检查版本,确认安装成功
$ git --version

创建用户组和用户,用于运行 Git 服务

1
2
3
4
5
6
7
8
9
10
# 添加用户组
$ groupadd git
# 添加用户到这个用户组(git仓库的所有者)
$ useradd -g git git
# 给git用户设置密码
$ passwd git
Changing password for user git.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

初始化 Git 仓库

选定一个目录作为 Git 仓库,如/home/gitRepo/demo.git,在/home/gitRepo 目录下输入命令

1
2
3
4
5
6
$ cd /home
$ mkdir gitRepo
$ chown git:git gitRepo
$ cd gitRepo
$ git init --bare demo.git
Initialized empty Git repository in /home/gitrepo/demo.git/

创建一个空仓库,服务器上的 Git 仓库通常都以.git结尾,把仓库所属用户改为 git

1
$ chown -R git:git demo.git

Tips

使用git init --bare <repo>可以创建一个裸仓库,并且这个仓库是可以被正常 clone 和 push 的,裸仓库不包含工作区,所以不能在裸仓库上直接提交变更。

同步到指定的目录

使用钩子函数,在文件提交到仓库时,同步到指定的目录。

1
2
3
4
5
$ cd /home/gitRepo/demo.git/hooks
$ touch post-receive
$ chown -R git:git post-receive
$ chmod +x post-receive
$ vim post-receive

post-receive 文件内容为

1
2
3
4
5
6
#!/bin/bash
# 文件提交到仓库时,同步到指定的目录
DIR=/home/www/demo
git --work-tree=${DIR} clean -fd
#直接强制检出
git --work-tree=${DIR} checkout --force

创建目录 demo,添加到 git 用户组

1
2
$ mkdir /home/www/demo
$ chown -R git:git /home/www/demo

克隆仓库

1
2
3
4
$ git clone git@192.168.1.6:/home/gitRepo/demo.git
Cloning into 'demo'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.

说明:

git@192.168.1.6:192.168.1.6 为 Git 所在服务器 ip ,你需要将其修改为你自己的 Git 服务 ip。

前缀 git为添加的用户。

这里,因为没有提前创建证书登录,所以需要输入上面设置好的 git 用户密码。

创建证书登录

收集所有需要登录的用户的公钥,公钥位于 id_rsa.pub 文件中(如果本地是 Windows 系统,一般在 C 盘用户下的.ssh 目录中),把我们的公钥导入到/home/git/.ssh/authorized_keys 文件里,一行一个。

如果没有该文件创建它

1
2
3
4
5
$ cd /home/git/
$ mkdir .ssh
$ chmod 755 .ssh
$ touch .ssh/authorized_keys
$ chmod 644 .ssh/authorized_keys

相关链接

[1] 服务器上的 Git - 在服务器上搭建 Git

[2] git init 与 git init –bare

[3] Git 服务器搭建

[4] Linux 命令大全

[5] Linux 命令大全(超详细版)

[6] git init 与 git init –bare