链接到服务器这些就不说了,这些都是提前配置好服务器并连接,这里用的是ubuntu做为服务器
所有的操作都是在root权限下使用
安装GIT,以及添加GIT管理用户账号 安装GIT需要的组件
安装 openssh,命令如下:
1 sudo apt-get install openssh-server -y
安装完成之后,查看ssh服务是否启动,命令如下:
从源代码安装GIT
如果您确实想从源代码安装 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
点击参考源可查看:
为了能够添加各种格式(doc,html,info)的文档,需要这些额外的依赖项:
1 sudo apt-get install asciidoc xmlto docbook2x -y
点击参考源可查看:
如果您使用基于 Debian 的发行版(Debian / Ubuntu / Ubuntu-derivatives),您还需要以下软件包install-info:
1 sudo apt-get install install-info
点击参考源可查看:
创建一个用户名,管理GIT项目 git 是用户名,可以创建自己喜欢的用户名,可以设置别的名字
给git用户添加文件的写权限
使用vim编辑/etc/sudoers (如果第3步设置了别的用户名,那么这里也需要设置别的用户明)
找到User privilege specification部分,添加如下内容:
如下图所示:
在Ubuntu 24.04中,你可以通过添加用户到sudoers.d目录来赋予该用户sudo权限。这里是如何做的:
进入目录/etc/sudoers.d、创建一个新的用户条目文件、打开文件,添加一个新的条目来赋予用户sudo权限。在本文中username就是你创建的用户名,既git
1 2 3 cd /etc/sudoers.d sudo touch username sudo vim username
也可以通过如下方式创建该文件:
1 sudo nano /etc/sudoers.d/username
例如,如果你想要给用户名为username的用户sudo权限,可以添加以下内容:
1 username ALL=(ALL:ALL) ALL
修改文件权限
检查Ubuntu中sudoers或sudoers.d中的文件夹语法
输入以下命令检查sudoers文件的语法是否正确:
如果出现语法错误提示,可以使用编辑器来修改上面对应文件
1 sudo visudo #可以使用该这个编辑也可以使用 vim vi 等软件编辑
重新检查文件的语法是否正确;
重新加载 重启吧,最简单了,如下都是重启指令
安装GIT 1 apt-get install git-core
安装自动更新程序 Ubuntu 18.04 官方源的 Git 版本为 2.17.x,需通过官方 PPA 升级(源码编译兼容性差,优先 PPA):
校验是否已安装工具包 1 2 3 4 5 6 7 8 9 10 # 方式1 标准dpkg查询 dpkg -l software-properties-common # 方式2 判断add-apt-repository命令是否存在 which add-apt-repository # 一键判断脚本 if dpkg -l software-properties-common 2>/dev/null | grep -q '^ii'; then echo "✅ 已安装 software-properties-common" else echo "❌ 未安装,执行安装命令" fi
安装 PPA 依赖 1 2 # 18.04需先安装添加PPA的工具 sudo apt update -y && sudo apt install -y software-properties-common apt-transport-https ca-certificates
校验 PPA 是否已存在 1 2 3 4 # 查看源文件 ls /etc/apt/sources.list.d/ | grep git-core # 查看是否拉取到PPA的Git高版本 apt show git -a | grep ppa.launchpad.net
有输出代表已添加,无需重复执行添加命令
无输出代表未添加,执行下方命令
添加 Git 官方 PPA 源 1 2 # 添加git-core官方PPA(18.04兼容) sudo add-apt-repository -y ppa:git-core/ppa -y
1 2 # 更新源缓存(解决18.04 PPA源密钥验证问题) sudo apt update -y
添加后验证 PPA 生效 1 2 3 4 # 查看是否出现2.54.0这类高版本PPA包 apt show git -a # 过滤PPA来源确认 apt show git -a | grep -E "Version|APT-Sources"
升级 Git 到最新版 1 2 3 4 5 # 升级Git(18.04下会从2.17.x升级到2.45+) sudo apt upgrade -y git # 验证版本(正常输出:git version 2.45.x) git --version
Git 自动更新配置 查看版本信息
1 2 3 4 Ubuntu 18.04 → bionic Ubuntu 20.04 → focal Ubuntu 22.04 → jammy Ubuntu 24.04 → noble
自动更新配置 18.04 的unattended-upgrades需适配旧版规则,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 1. 确保自动更新服务安装 安装自动更新工具的命令 sudo apt install -y unattended-upgrades # 2. 创建Git独立自动更新配置文件 sudo tee /etc/apt/apt.conf.d/60-git-auto-upgrade << 'EOF' # Git自动更新(Ubuntu 18.04 bionic) Unattended-Upgrade::Allowed-Origins { "ppa.launchpad.net/git-core/ppa/ubuntu bionic main"; }; # 仅更新Git相关包 Unattended-Upgrade::Package-Whitelist { "^git$"; "^git-core$"; "^git-man$"; }; # 关闭不必要的自动重启(18.04 Git无服务) Unattended-Upgrade::Automatic-Reboot "false"; EOF # 3. 启用并重启服务 sudo systemctl enable --now unattended-upgrades sudo systemctl restart unattended-upgrades
20.04 的unattended-upgrades需适配旧版规则,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 1. 确保自动更新服务安装 安装自动更新工具的命令 sudo apt install -y unattended-upgrades # 2. 创建Git独立自动更新配置文件 sudo tee /etc/apt/apt.conf.d/60-git-auto-upgrade << 'EOF' # Git自动更新(Ubuntu 20.04 bionic) Unattended-Upgrade::Allowed-Origins { "ppa.launchpad.net/git-core/ppa/ubuntu focal main"; }; # 仅更新Git相关包 Unattended-Upgrade::Package-Whitelist { "^git$"; "^git-core$"; "^git-man$"; }; # 关闭不必要的自动重启(20.04 Git无服务) Unattended-Upgrade::Automatic-Reboot "false"; EOF # 3. 启用并重启服务 sudo systemctl enable --now unattended-upgrades sudo systemctl restart unattended-upgrades
22.04 的unattended-upgrades需适配旧版规则,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # 1. 确保自动更新服务安装 安装自动更新工具的命令 sudo apt install -y unattended-upgrades # 2. 创建Git独立自动更新配置文件 sudo tee /etc/apt/apt.conf.d/60-git-auto-upgrade << 'EOF' # 仅保留Git自动更新的核心规则,移除所有可能冲突的写法 Unattended-Upgrade::Origins-Pattern { "origin=LP-PPA-git-core"; }; Unattended-Upgrade::Package-Whitelist { "^git$"; "^git-core$"; "^git-man$"; }; Unattended-Upgrade::Automatic-Reboot "false"; EOF # 3. 启用并重启服务 sudo systemctl enable --now unattended-upgrades sudo systemctl restart unattended-upgrades
24.04 的unattended-upgrades需适配旧版规则,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 # 1. 确保自动更新服务安装 安装自动更新工具的命令 sudo apt install -y unattended-upgrades # 2. 创建Git独立自动更新配置文件 sudo tee /etc/apt/apt.conf.d/60-git-auto-upgrade << 'EOF' # Git自动更新(Ubuntu 24.04 noble,适配最新语法) # 核心:用"origin:"匹配PPA源,而非直接写源地址 Unattended-Upgrade::Origins-Pattern { "origin=LP-PPA-git-core,archive=noble"; }; # 仅更新Git相关包 Unattended-Upgrade::Package-Whitelist { "^git$"; "^git-core$"; "^git-man$"; }; # 关闭自动重启(Git无服务) Unattended-Upgrade::Automatic-Reboot "false"; EOF # 3. 启用并重启服务 sudo systemctl enable --now unattended-upgrades sudo systemctl restart unattended-upgrades
验证自动更新是否生效 1 2 3 4 5 # 模拟执行自动更新(仅检查,不实际安装) sudo unattended-upgrade --dry-run --debug | grep git # 查看自动更新日志(确认是否有Git更新记录) grep -i git /var/log/unattended-upgrades/unattended-upgrades.log
正常输出示例(无报错,识别 Git 源):
1 2 3 4 5 Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-security, o=nginx.org,a=noble, origin=LP-PPA-git-core,archive=noble Initial whitelist (not strict): ^git$ ^git-core$ ^git-man$ ^nginx$ ^nginx-core$ ^nginx-common$ Applying pinning: PkgPin(pkg='/^^git$/', priority=900) Applying pinning: PkgPin(pkg='/^^git-core$/', priority=900) Applying pinning: PkgPin(pkg='/^^git-man$/', priority=900)
手动升级 Git(可选,立即更新至 PPA 最新版) 1 2 3 4 5 6 # 模拟升级 sudo apt upgrade git --dry-run # 真实升级 sudo apt upgrade git -y # 验证当前Git版本 git --version
校验系统自动更新定时任务是否开启 1 cat /etc/apt/apt.conf.d/20auto-upgrades
必须存在两项值为 1:
1 2 APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
未开启则执行配置向导:
1 sudo dpkg-reconfigure -plow unattended-upgrades
全套一键自检脚本(复制直接运行,一次性校验全流程) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #!/bin/bash echo "=====1. 校验依赖工具包=====" if dpkg -l software-properties-common 2>/dev/null | grep -q '^ii' ; then echo "✅ software-properties-common 已安装" else echo "❌ software-properties-common 未安装" fi echo "" echo "=====2. 校验git-core PPA源文件=====" if ls /etc/apt/sources.list.d/ | grep -q git-core; then echo "✅ git-core PPA源文件存在" else echo "❌ git-core PPA源文件不存在" fi echo "" echo "=====3. 校验PPA高版本Git是否拉取成功=====" if apt show git -a 2>/dev/null | grep -q ppa.launchpad.net; then echo "✅ PPA提供的Git版本已加载" else echo "❌ 未识别到PPA Git包" fi echo "" echo "=====4. 校验自动更新配置文件=====" if [ -f /etc/apt/apt.conf.d/60-git-auto-upgrade ]; then echo "✅ Git自动更新配置文件存在" else echo "❌ Git自动更新配置文件缺失" fi echo "" echo "=====5. 校验unattended-upgrades识别Git规则=====" sudo unattended-upgrade --dry-run --debug 2>/dev/null | grep gitecho "" echo "=====6. 查看当前Git版本=====" git --version
切换至git用户,安装git 1 2 su git sudo apt-get install git-core
客户端生产私钥与公钥,并复制追加到Ubuntu服务器 生成公钥和私钥
在客户端打开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
同时还要在~/.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 ## 这里填写上面生成的密钥
其实设置域名和没设置域名只是方便记忆的问题,没有多大区别,别人想找你的服务器还是可以直接找到。
服务器设置域名,我这里是ubuntu为例,找到路径/etc下的hosts文件,在箭头指定地方添加下面,其中IP修改成你服务器IP ,域名设置成你绑定的域名。
1 192.168.183.29 server.xxxx.com
2.公钥放到服务器中
在第一章节第3小节在ubuntu中创建了一个git用户,接下来进入该目录下面
1 2 3 4 5 6 7 8 # su git # cd /home/git # ll
查看git目录下是否有.ssh文件夹,如果没有就创建该文件夹,如果有就不用创建。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # mkdir .ssh # sudo mkdir .ssh # ll # sudo chown -R $USER:$USER .ssh 如果不是在git权限下,需要使用如下命令 sudo chown -R git:git .ssh
效果如图所示,我这里不是创建的git用户名,所以与上面不同,但是效果是相同的
进入.ssh,如果有authorized_keys文件,就不用创建,如果没有就创建authorized_kesys;该文件主要是存放公钥文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 # touch authorized_keys # ll # sudo chown -R $USER:$USER authorized_keys 如果不是在git权限下,需要使用如下命令 sudo chown -R git:git .ssh # 进入该文件 vim authorized_keys
然后将 id_rsa.pub 里的内容添加到 authorized_keys 文件中;可以直接复制粘贴,也可以用命令:cat /home/git/id_rsa.pub>>/home/git/.ssh/authorized_kys;多个密钥就挨个儿往下添加,不要覆盖
如果你像我一样,有多台电脑,那么创建的时候,就需要换名字,不换名字只能用完一个删一个。
3.创建GIT仓库,以及钩子函数 1.创建GIT裸仓库
我个人习惯性创建仓库在/usr/local/目录下创建仓库。该仓库位置任意放置都可以,只要自己记住,或者根据自己习惯放置,初始化裸库
pro.git是裸仓库文件夹名称,可以自己定义任何仓库名称,后缀带上.git
修改裸体仓库权限,使用当前命令,是处于git账户下才使用该命令,如果不是请看第3。
1 sudo chown -R $USER:$USER pro.git
如果不是出于你需要的用户权限下,使用如下命令
1 sudo chown -R git:git pro.git
2.创建GIT仓库,可以看到对应的文件
创建了一个仓库,叫做pro,该仓库把权限也像上面一样设置到 git权限下
3.配置自己想要的钩子函数 1.自动化部署
如果我们想看上传到 pro.git文件夹中的项目,那么可以在 pro.git文件夹下找到hooks,加入该文件夹
创建一个post-receive文件;
文件内容如下,使用该代码,必须在默认分支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裸仓库的目录。
如果不是在默认分支master上,就执行如下代码
让该文件变为可执行文件
克隆仓库到本地,切换到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 - 设置服务器 2.Ubuntu20.4搭建git服务器 3.利用GIT钩子函数实现自动部署或其他操作 4.了解git裸仓库并利用post-receive自动化部署 5.利用GIT钩子函数实现自动部署或其他操作