搭建 Git 私人服务器完整指南

本文涉及的产品
轻量应用服务器 4vCPU 16GiB,适用于搭建游戏自建服
轻量应用服务器 2vCPU 4GiB,适用于搭建容器环境
轻量应用服务器 2vCPU 4GiB,适用于网站搭建
简介: 本文详细介绍了如何从零开始搭建一个私人的 `Git` 服务器。首先,文章解释了 `Git` 的概念及其优势,并阐述了搭建私人 `Git` 服务器的重要性,包括数据隐私、定制化需求及成本效益。接着,文章分步骤指导读者完成服务器的准备工作,包括操作系统、硬件和网络要求。随后,详细介绍了在不同操作系统上安装 `Git` 的方法,并演示了如何创建 `git` 用户、部署仓库以及设置免密登录。此外,还提供了客户端连接远程仓库的具体步骤,包括 Linux 和 Windows 的操作方式。最后,文章探讨了迁移仓库的方法以及搭建 `Git` 服务器的一些进阶选项。

在现代软件开发中,Git 已经成为最流行的版本控制系统之一。虽然 GitHubGiteeGitLab 等公共服务提供了方便的托管平台,但有时候由于安全性、隐私或其他定制化需求,我们可能需要搭建一个自己的 Git 服务器。

这篇指南将带你从头到尾,逐步完成 Git 私人服务器的搭建。

1、引言

1.1 Git 简介

Git 是一个分布式版本控制系统,由 Linus Torvalds 于2005年开发。它能够快速高效地处理从小型到大型项目的所有版本管理需求。由于其分布式的特性,每个开发者都拥有完整的代码库历史,这意味着即使没有服务器,开发者之间也能进行协作。

1.2 为什么要搭建私人 Git 服务器?

使用公共 Git 托管服务非常方便,但有些企业或个人开发者可能会考虑搭建自己的 Git 服务器,主要出于以下原因:

  • 数据隐私:保证源代码和版本历史只存储在内部网络中,减少外部泄露的风险。
  • 定制化需求:可以根据自身需求定制服务器配置和工作流程。
  • 成本:对于大规模项目或私有项目,搭建自己的服务器可能比长期付费使用公共服务更划算。

(小声逼逼:现在 AI 发展的确实有点猛,各个厂商都拿着自己手里的数据去训练 AI,最近一个新闻,说番茄小说在签约的协议中增加了 “ AI 训练补充协议”,要求作者同意把作品 “授权” 给平台的 AI,用于内容开发,这真的很难评,虽然我写的代码很烂,但还是不想在不知情的情况下拿去投喂 AI 了。)

2、准备工作

在开始搭建之前,你需要确保有一个适合的环境。以下是一些推荐的配置:

  • 操作系统:大多数情况下,建议使用 Linux 发行版(如 UbuntuCentOS)。当然,WindowsmacOS 也可以,但配置可能稍有不同。
  • 硬件要求:普通的项目管理中,一个最低配的 VPS(1-2GB RAM,1-2核CPU)通常足够。如果管理多个大项目或有高并发需求,建议使用更高配的服务器。
  • 网络要求:确保服务器有一个静态IP地址,以便开发者能够稳定地访问。

(具体情况依照你手头的设备而定,如果你手上有云服务器,就使用云服务器进行配置。如果家里有公网 IP,也可以在家用家用服务器进行配置。如果没有公网 IP,也可以通过内网穿透,内网穿透教程还没写完,可以期待一下,哈哈哈。最后还是建议大家使用云服务器,最近国内几大云服务器厂商做活动,38元一年,还有公网 IP,便宜方便还省事,而且不仅仅可以拿来搭建 Git,还可以搭建个人网站,做测试,等等,具体买哪家就不做推荐)

3、安装和配置服务器 Git

3.1、在不同系统上安装 Git

在不同操作系统上安装 Git 的方法略有不同,这里介绍 LinuxWindows 的安装方法。

3.1.1、切换 root 账户

建议在操作之前先切换至 root 账户

su root
AI 代码解读

如果不切换账户,请在下列指令前添加 sudo 提权

3.1.2、在 Ubuntu 安装 Git

在 Linux 上安装 Git(以 Ubuntu 为例):

apt update
apt install git
AI 代码解读

3.1.3、在 CentOS 安装 Git

在 CentOS 上安装 Git:

yum update
yum install git
AI 代码解读

3.1.4、在 Windows 安装 Git

在 Windows 上安装 Git:

  1. 前往Git for Windows官网下载安装包。
  2. 运行安装程序,按照向导进行安装。
  3. 安装完成后,可以使用 Git Bash 进行 Git 操作。

3.1.5、查看安装版本

安装成功后,可以看一下自己安装的版本

git --version
AI 代码解读

3.2、意外问题

我在使用阿里云服务器的时候安装 git 时遇到 yum 源安装软件安装失败问题,如果你也遇到相同问题可以停下来看看,如果没遇到,可以跳过本节。

在输入安装 git 命令后,安装失败

yum install git
AI 代码解读

如果你也出现相同问题,可以查看 yum 配置。

vim /etc/yum.repos.d/docker-ce.repo
AI 代码解读

打开后是这个样子的,发现第四行,enabled=1,其他都是0,将其改为0。

如果不熟悉 VIM 操作,可以跟着我操作,如果熟悉操作请跳过

  1. 将键盘调至英文输入,以下操作都是英文输入下进行
  2. i 键进入输入模式,移动光标至需要修改的地方修改
  3. 修改完成后按 ESC 键退出输入模式
  4. : 键 (shift + ;),输入 wq 保存退出

完成上述步骤后输入下载指令,应该就能成功下载了

yum --disablerepo=docker install git
AI 代码解读

3.3、创建 git 用户

为了安全起见,我们通常会为 Git 操作创建一个专用的用户。这个账户只做 Git 私服的操作

创建一个名为 git 用户

adduser git
AI 代码解读

git 用户设置一个密码

passwd git
AI 代码解读

然后输入你要设置的密码,值得注意的是,为了安全,Linux 系统在输入密码的时候是不回显的。尽量将密码复杂度设置的高一些,我这里为了方便演示,将密码设置为 123456 。

3.4、设置 git 账户,部署仓库

3.4.1、切换用户

切换至刚刚创建的 git 用户

su - git
AI 代码解读

如果你刚刚添加的用户名是别的名字,就把 git 改成你刚刚添加的自定义用户名。

你也可以使用 whoami 指令确认一下是不是已经切换成功,root 用户切换成其他 用户不需要输入密码,其次,可以输入指令 pwd 指令确认一下是不是已经处在 git 家目录中,如果不在 可以输入指令 cd /home/git 进入 git 家目录。

3.4.2、创建仓库目录

我们可以看一下 GitHubLinux 项目的仓库路径

git@github.com:torvalds/linux.git
AI 代码解读

我们可以看到大厂的命名规范,torvalds 是发布 linux 仓库的主账户名,linux.git 是仓库名称。

例如,我的取名为 Lenyiin ,大家也可以根据自己喜好命名

mkdir Lenyiin
AI 代码解读

进入 Lenyiin 目录中

cd Lenyiin
AI 代码解读

在这个目录下,大家就可以随意创建自己的仓库了

例如,我创建一个图片仓库,一个博客仓库

mkdir image.git
mkdir blog.git
AI 代码解读

3.4.3、初始化仓库

blog.git 仓库为例,其他仓库也是同样操作

cd blog.git
git init --bare
AI 代码解读

此时,我们的服务器仓库就成功部署完成,是不是非常简单!

4、客户端连接远程仓库

解下来我将使用 Linux 和 Windows 分别演示如何连接远端仓库

4.1、Linux 连接远端仓库

在另一台 Linux 机器上创建你想放置放库的目录,如我就创建一个 blog 文件夹,放置刚刚创建的 blog.git

创建文件,你可以自定义命名

mkdir blog
AI 代码解读

进入目录中**

cd blog
AI 代码解读

初始化客户端仓库

git init
AI 代码解读

此时,客户端也配置好了,我们可以随便在仓库里写一点内容来测试一下

在仓库目录下创建 hello.txt 文件,并写入 hello Lenyiin

touch hello.txt
echo "hello Lenyiin" > hello.txt
AI 代码解读

将新修改的内容添加到 git 版本管理中,并添加描述

git add hello.txt 
git commit -m "第一次提交"
AI 代码解读

将本地仓库推送至远端服务器

以我为例,我的远端服务器公网 IP“20.2.71.4” ,你在推送的时候请将 IP 地址替换上来

git remote add origin git@20.2.71.4:Lenyiin/blog.git
git push -u origin master
AI 代码解读

第一次推送到远端仓库的时候会询问你是否继续,输入 yes ,解下来,他会要求你输入密码,请输入你刚刚创建 git 用户时候设置的密码,密码输入过程无回显,按回车确认。至此,本地仓库推送到远端仓库讲解完毕!

4.2、设置免密登录,设置域名(非必须)

上面已经讲解了使用密码推送本地仓库到远端,在讲解 Windows 推送仓库之前,先讲解一下如何设置免密推送,和域名,这样可以在 Windows 讲解上一并演示。

4.2.1、Linux 客户端创建密匙

ssh-keygen -t rsa
AI 代码解读

在需要免密的客户端机器上输入指令,创建密匙的过程中,一路点回车,不用填写任何内容。

密匙存放在当前用户的家目录的 .ssh 文件夹下,进入该文件

cd /home/git/.ssh/
AI 代码解读

.ssh 有两个文件,其中 id_rsa 是私钥,id_rsa.pub 是公钥,将公钥 id_rsa.pub 拷贝到到部署 git 的远端服务器 /home/git/.ssh/ 下。值得注意的是,请千万不要泄露你的私钥,请千万不要泄露你的私钥,请千万不要泄露你的私钥。

4.2.2、Windows 创建密匙

Windows 创建密匙的指令相同,调出任务管理器,输入指令,一路回车。Windows 的公钥和私钥存放在 C:\Users\用户名\.ssh 下。将 id_rsa.pub 拷贝到远端服务器 /home/git/.ssh/ 下。

4.2.3、部署 Git 服务的远端服务器添加公钥

以上都是客户端创建公钥,通过上面的操作,不管是 Linux 用户还是 Windows 用户应该都已经拿到了自己的公钥。

进入 git 家目录下

cd /home/git
AI 代码解读

查看是否有 .ssh 文件

ls -a -l
AI 代码解读

如果没有 .ssh 就创建一个

mkdir .ssh
AI 代码解读

如果有就直接进入

cd .ssh
AI 代码解读

进入 .ssh 文件,查看是否存在 authorized_keys

ls -a -l
AI 代码解读

如果不存在就创建一个,如果存在就不需要创建

touch authorized_keys
AI 代码解读

此外,还需要给 authorized_keys 文件设置权限,不然可能会导致无法免密登录

chmod 700 /home/git/.ssh
chmod 600 /home/git/.ssh/authorized_keys
AI 代码解读

紧接着就到了上面客户端创建密匙的公钥,就是拷贝到这个文件夹下,将客户端的公钥追加到 authorized_keys 文件中

at id_rsa.pub >> authorized_keys
AI 代码解读

如果你有多个客户端想免密登录服务器,一次通过上述方法,将各个客户端的公钥追加到服务器端的 authorized_keys 文件中。

最后可以查看一下是否追加成功

ls -a -l
AI 代码解读

此时已经成功设置免密登录了。

4.3、域名解析

上面的操作已经可以让你的客户端机器免密登录到服务器了,如果你手上有域名,或者想买个域名,更方便的使用,可以接着往下看,如果不想使用域名,可以跳过本节,直接看 Windows 连接客户端操作。

进入域名厂商的控制台,如果在阿里云买的就进入阿里云控制台,如果是在腾讯云买的就进入腾讯云的控制台。点击域名解析管理,点击添加记录

例如我想将我的域名 lenyiin.cn 设置为仓库主域名,记录类型选择 A,主机记录填 @,记录值填你服务器的 IP地址,确认。如果你想设置二级域名解析,可以将主机记录修改成你自定义的二级域名。

此时,域名解析设置完成。

4.4、Windows 连接远端仓库

相信你在第三节已经完成了 Git 的安装,选择一个你想要存放你的仓库的盘符下,右键鼠标,在出现的菜单栏中点击 “open git bush here” ,输入 clone 指令,即可将远端仓库克隆到本地。

git clone git@lenyiin.cn:Lenyiin/blog.git
AI 代码解读

没有域名就使用 IP 地址

git clone git@20.2.71.4:Lenyiin/blog.git
AI 代码解读

我们在 hello.txt 里增加 “windows over!!!” 并在 Windows 上推送到远端服务器

git add .
git commit -m "第二次修改"
git push
AI 代码解读

我们登录另一台 Linux 客户端拉取最新仓库

在客户端的仓库目录下,输入指令,拉取远端仓库内容。发现内容成功更新。

git pull
AI 代码解读

至此,客户端连接服务器部分讲解完毕!

5、迁移仓库

如果云服务器过期了,我想迁移到另一台特价打折的服务器上呢?

  1. 在服务器端,只需在新的机器上创建 git 用户,并设置密码,将仓库文件内容复制到新服务器家目录里即可。
  2. 在客户端,进入仓库根目录,进入 .git 目录下,打开 config 文件,将旧服务器 IP 地址修改至新 IP 地址。对于设置免密的,还需要将公钥追加进新服务器的 authorized_keys 中。
cd /home/git/blog.git/.git/
vim config
AI 代码解读

6、搭建 Git 服务器的进阶选项

基本上走完上述流程,你已经完成了基本的 git 的搭建和使用。你还可以进阶一下操作,让你的 git 更完备。这部分内容我只是简单说一下,具体操作我就不往下贴了。

6.1、使用 Git 自带的 git daemon

Git 内置了一个简易的服务器,称为git daemon,它可以快速启动一个Git服务器供其他人克隆和推送。

6.2、Hooks

Git 提供了一套钩子(hooks)机制,可以在特定事件发生时触发特定的脚本。例如,你可以设置一个post-receive钩子,在每次接收到新的代码时自动部署它。

配置示例: 在blog.git/hooks/目录下创建一个post-receive文件,并赋予执行权限:

#!/bin/sh
GIT_WORK_TREE=/path/to/deploy git checkout -f
AI 代码解读

这将会在每次推送代码后,将代码部署到指定的目录。

6.3、使用 Gitolite 管理权限

Gitolite 是一个 Git 服务器的管理工具,可以帮助你方便地管理多个仓库和用户的访问权限。

安装和配置 Gitolite

sudo apt-get install gitolite3
sudo -H -u git gl-setup /path/to/your/admin.pub
AI 代码解读

然后,你可以通过编辑配置文件来管理用户和仓库的权限。

6.4、搭建 Web 界面(如 GitWeb 或 Gitea)

有时候,我们希望能够通过 Web 浏览器查看代码仓库。GitWebGitea 是两种常见的 Web 界面工具。

安装 Gitea

wget -O gitea https://dl.gitea.io/gitea/1.14.0/gitea-1.14.0-linux-amd64
chmod +x gitea
./gitea web
AI 代码解读

Gitea 是一个轻量级的Git服务器自托管解决方案,带有简洁的 Web 界面,类似于 GitHub

6.5、设置自动备份

为了防止数据丢失,设置自动备份是非常重要的。可以使用 cron 任务定期备份 Git 仓库。

配置备份脚本: 创建一个简单的备份脚本 backup.sh

#!/bin/bash
tar -czf /backup/git-backup-$(date +\%F).tar.gz /home/git/
AI 代码解读

然后将其添加到 cron 任务中:

0 3 * * * /path/to/backup.sh
AI 代码解读

这将会每天凌晨3点自动备份所有 Git 仓库。

7、维护与管理

7.1、服务器的日常维护

  • 定期更新:确保操作系统和 Git 软件处于最新版本,以避免安全漏洞。
  • 日志检查:定期检查 /var/log 中的日志文件,了解服务器的运行状态。

7.2、日志与监控

  • 访问日志:通过配置SSH日志,可以查看谁何时访问了服务器。
  • 监控工具:如使用NagiosPrometheus 等工具监控服务器状态和资源消耗。

7.3、升级与备份

  • 升级 Git:定期使用包管理器或源码编译的方式升级 Git
  • 数据备份:不仅仅备份 Git 仓库本身,还要备份服务器的配置文件等重要数据。

8、总结

搭建一个 Git 私人服务器,虽然需要一些时间和精力,但能够提供更高的定制化和安全性。通过本文的指南,你可以从零开始搭建一个属于自己的Git服务器,并根据实际需求进行扩展和管理。无论是小型团队合作,还是企业级的版本控制需求,这样一个自主可控的解决方案都能为你的开发工作带来巨大的便利。

Git官方文档

提示:如果你只是为了测试一下搭建经过,用完即删,可以使用删除用户指令

userdel -r git
AI 代码解读

这条指令会删除用户 git ,同时删除 git 的工作目录,慎用!


希望大家能多多支持一下新人博主,喜欢更多知识的可以访问我的个人博客网站,谢谢大家 https://blog.lenyiin.com

Lenyiin
+关注
目录
打赏
0
1
0
0
1
分享
相关文章
[Git] 深入理解 Git 的客户端与服务器角色
Git 的核心设计理念是分布式,每个仓库既可以是客户端也可以是服务器。通过 GitHub 远程仓库和本地仓库的协作,Git 实现了高效的版本管理和代码协作。GitHub 作为远程裸仓库,存储项目的完整版本历史并支持多客户端协作;本地仓库则通过 `.git` 文件夹独立管理版本历史,可在离线状态下进行提交、回滚等操作,并通过 `git pull` 和 `git push` 与远程仓库同步。这种分布式特性使得 Git 在代码协作中具备强大的灵活性和可靠性。
94 18
[Git] 深入理解 Git 的客户端与服务器角色
图解Git——服务器上的Git《Pro Git》
Git 远程仓库及通信协议简介:远程仓库为团队协作提供平台,支持共享代码。常见形式为裸仓库,仅保存 Git 元数据。Git 支持多种协议,包括本地协议(适合局域网)、HTTP/HTTPS(推荐智能 HTTP,安全易用)、SSH(企业内部协作首选)和 Git 协议(高效只读访问)。选择协议需根据协作需求、安全性和配置难度权衡。此外,搭建 Git 服务器涉及创建裸仓库、上传至服务器、初始化共享仓库等步骤。生成 SSH 公钥、配置服务器及使用 GitWeb 或 GitLab 等工具可进一步增强功能。第三方托管服务如 GitHub 提供便捷的托管选项,适合快速启动和开源项目。总结而言,自行运行服务器提
73 11
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
如何清理 docker 磁盘空间+修改 Gitea 服务器的 Webhook 设置+前端一些好学好用的代码规范-git hook+husky + commitlint
85 5
服务器配置Huggingface并git clone模型和文件
该博客提供了在服务器上配置Huggingface、安装必要的工具(如git-lfs和huggingface_hub库)、登录Huggingface以及使用git clone命令克隆模型和文件的详细步骤。
781 1
git实现服务器自动push拉取代码--webhooks
git实现服务器自动push拉取代码--webhooks
730 1
git怎么设置http代理服务器
git怎么设置http代理服务器
221 12
如何实现Git Push之后自动部署到服务器?
如何实现Git Push之后自动部署到服务器?
318 0
Git服务器报错:host key for (ip地址) has changed and you have requested strict checking
Git服务器报错:host key for (ip地址) has changed and you have requested strict checking
608 0
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
Git学习---Git快速入门、Git基础使用、Git进阶使用、Git服务器使用(IDEA集成GitHub、Gitee、GitLab)、GitHub Desktop客户端
260 0
阿里云特惠云服务器99元与199元配置与性能和适用场景解析:高性价比之选
2025年,阿里云长效特惠活动继续推出两款极具吸引力的特惠云服务器套餐:99元1年的经济型e实例2核2G云服务器和199元1年的通用算力型u1实例2核4G云服务器。这两款云服务器不仅价格亲民,而且性能稳定可靠,为入门级用户和普通企业级用户提供了理想的选择。本文将对这两款云服务器进行深度剖析,包括配置介绍、实例规格、使用场景、性能表现以及购买策略等方面,帮助用户更好地了解这两款云服务器,以供参考和选择。

相关产品

  • 云服务器 ECS
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等