ubuntu搭建git服务器及配置

链接到服务器这些就不说了,这些都是提前配置好服务器并连接,这里用的是ubuntu做为服务器

所有的操作都是在root权限下使用

1.安装GIT,以及添加GIT管理用户账号

1.安装GIT需要的组件

  1. 安装 openssh,命令如下:
1
sudo apt-get install openssh-server -y
  1. 安装完成之后,查看ssh服务是否启动,命令如下:
1
ps -e|grep ssh

2.从源代码安装GIT

  1. 如果您确实想从源代码安装 Git,则需要具有 Git 所依赖的以下库:autotools、curl、zlib、openssl、expat 和 libiconv。
1
2
sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev \
gettext libz-dev libssl-dev -y

点击参考源可查看:

  1. 为了能够添加各种格式(doc,html,info)的文档,需要这些额外的依赖项:
1
sudo apt-get install asciidoc xmlto docbook2x

点击参考源可查看:

  1. 如果您使用基于 Debian 的发行版(Debian / Ubuntu / Ubuntu-derivatives),您还需要以下软件包install-info
1
sudo apt-get install install-info

点击参考源可查看:

3.创建一个用户名,管理GIT项目

git 是用户名,可以创建自己喜欢的用户名,可以设置别的名字

1
adduser git

4.给git用户添加文件的写权限

  1. 使用vim编辑/etc/sudoers (如果第3步设置了别的用户名,那么这里也需要设置别的用户明)
1
vim /etc/sudoers
  1. 找到User privilege specification部分,添加如下内容:
1
git    ALL=(ALL:ALL) ALL

如下图所示:

ubuntu添加用户.png

5.安装GIT

1
apt-get install git-core

6.切换至git用户,安装git

1
2
su git
sudo apt-get install git-core

2.客户端生产私钥与公钥,并复制追加到Ubuntu服务器

1.生成公钥和私钥

  1. 在客户端打开git软件,然后输入如下代码,其中Usermail@mail.com 可以修改成任何值;

    当同一台电脑上面有多个ssh时候,需要关注以前是否生成id_rsa 如果有生成那么建议改成用户名 + _id_rsa 格式:User_id_rsa,防止生成ssh时候覆盖了之前的ssh

1
ssh-keygen -t rsa -C 'Usermail@mail.com' -f ~/.ssh/User_id_rsa
  1. 同时还要在~/.ssh 目录下新建一个 config 文件,添加如下内容(其中 Host 和 HostName 填写 git 服务器的域名,IdentityFile 指定私钥的路径)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# gitee
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/gitee_id_rsa
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/github_id_rsa

# 自己服务器(如果没有给服务器设置域名的情况下)
Host 192.168.183.29 ## 这里填写自己服务器IP 例如 服务器IP为: 192.168.183.29
HostName 192.168.183.29 ## 这里填写自己服务器IP 例如 服务器IP为: 192.168.183.29
PreferredAuthentications publickey
IdentityFile ~/.ssh/User_id_rsa ## 这里填写上面生成的密钥

# 自己服务器有域名的情况下
Host server.xxxx.com ## 这里填写自己服务器的域名 例如 服务器域为: server.xxxx.com
HostName server.xxxx.com ## 这里填写自己服务器的域名 例如 服务器域为: server.xxxx.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/User_id_rsa ## 这里填写上面生成的密钥

​ 其实设置域名和没设置域名只是方便记忆的问题,没有多大区别,别人想找你的服务器还是可以直接找到。

  1. 服务器设置域名,我这里是ubuntu为例,找到路径/etc下的hosts文件,在箭头指定地方添加下面,其中IP修改成你服务器IP ,域名设置成你绑定的域名。
1
192.168.183.29 server.xxxx.com

image-20240620154522860

2.公钥放到服务器中

  1. 在第一章节第3小节在ubuntu中创建了一个git用户,接下来进入该目录下面
1
2
3
4
5
6
7
8
## 切换到git账户
su git

## 进入git用户目录
cd /home/git

## 遍历目录
ll
  1. 查看git目录下是否有.ssh文件夹,如果没有就创建该文件夹,如果有就不用创建。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 创建 .ssh 文件夹
mkdir .ssh

## 如果显示无法创建.ssh文件夹,就是用如下命令
sudo mkdir .ssh


## 查看 .ssh文件夹是否归宿于 git 用户
ll

## 如果不属于,请使用下面命令 ,$USER 代表着设置到当前用户管理权限下
sudo chown -R $USER:$USER .ssh
如果不是在git权限下,需要使用如下命令
sudo chown -R git:git .ssh

效果如图所示,我这里不是创建的git用户名,所以与上面不同,但是效果是相同的

image-创建其他用户

  1. 进入.ssh,如果有authorized_kesys文件,就不用创建,如果没有就创建authorized_kesys;该文件主要是存放公钥文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
## 没有 authorized_kesys 就执行下面命令,有就不需要使用该命令
touch authorized_kesys

## 查看该文件是否属于你创建的用户,
ll

##如果不属于就执行下面命令,属于就忽略该命令,$USER 代表着设置到当前用户管理权限下
sudo chown -R $USER:$USER authorized_kesys

如果不是在git权限下,需要使用如下命令
sudo chown -R git:git .ssh

#进入该文件
miv authorized_kesys
  1. 然后将 id_rsa.pub 里的内容添加到 authorized_kesys 文件中;可以直接复制粘贴,也可以用命令:cat /home/git/id_rsa.pub>>/home/git/.ssh/authorized_keys;多个密钥就挨个儿往下添加,不要覆盖
  2. 如果你像我一样,有多台电脑,那么创建的时候,就需要换名字,不换名字只能用完一个删一个。

3.创建GIT仓库,以及钩子函数

1.创建GIT裸仓库

  1. 我个人习惯性创建仓库在/usr/local/目录下创建仓库。该仓库位置任意放置都可以,只要自己记住,或者根据自己习惯放置,初始化裸库
1
git init --bare pro.git

pro.git是裸仓库文件夹名称,可以自己定义任何仓库名称,后缀带上.git

  1. 修改裸体仓库权限,使用当前命令,是处于git账户下才使用该命令,如果不是请看第3。
1
sudo chown -R $USER:$USER pro.git
  1. 如果不是出于你需要的用户权限下,使用如下命令
1
sudo chown -R git:git pro.git

2.创建GIT仓库,可以看到对应的文件

1
git init pro

创建了一个仓库,叫做pro,该仓库把权限也像上面一样设置到 git权限下

3.配置自己想要的钩子函数

1.自动化部署

  1. 如果我们想看上传到 pro.git文件夹中的项目,那么可以在 pro.git文件夹下找到hooks,加入该文件夹

创建一个post-receive文件;

1
sudo vim post-receive
  1. 文件内容如下,使用该代码,必须在默认分支master 上才能执行否则需要添加其他配置
1
2
3
#!/bin/bash
unset GIT_DIR
git --work-tree=/usr/local/hexoBlog/pro --git-dir=/usr/local/hexoBlog/pro.git checkout -f

其中--work-tree= 后面的目录就是你刚刚 git init初始化的文件夹;

--git-dir=后面就是你git init --bare裸仓库的目录。

  1. 如果不是在默认分支master上,就执行如下代码
1
2
3
需要使用别的办法


  1. 让该文件变为可执行文件
1
chmod +x ./post-receive

克隆仓库到本地,切换到master默认分支

1. 查看分支

1
2
3
4
5
6
7
8
git branch:这是最常用的命令,它会列出本地仓库所有的分支,当前分支会被标记出来。
git branch -r:此命令会列出所有远程分支。
git branch -a:此命令会列出所有的本地分支和远程分支。
git ls-remote --heads <仓库URL>:此命令会列出指定仓库的所有远程分支。需要将<仓库URL>替换为实际的仓库URL。
git show-ref:此命令会显示所有本地分支和它们的对应引用(commit SHA)。
git log --branches:此命令会显示所有分支的提交历史。
git branch --contains <commit>:此命令会列出包含指定提交的所有分支。需要将<commit>替换为实际的提交哈希值。
需要注意的是,在远程分支被删除后,它们可能仍然存在于本地的缓存中,可以使用git remote update origin --prune来清理本地缓存并同步远程分支列表。

2.创建master分支,并切换到master分支

1
git checkout -b master

文章参考:

1.服务器上的 Git - 设置服务器
2.Ubuntu20.4搭建git服务器
3.利用GIT钩子函数实现自动部署或其他操作
4.了解git裸仓库并利用post-receive自动化部署
5.利用GIT钩子函数实现自动部署或其他操作