前面咱们学了Git分支、合并这些本地操作,但团队协作光有本地仓库可不够~ 就像你写的代码想让同事帮忙review,总不能把电脑搬给人家吧?🤣
这时候就需要
Git服务器
啦!它就像一个“代码中转站”,所有人都能把代码推上去、拉下来,不管你在公司、家里还是咖啡店,只要能上网就能协作。本章咱们从协议选择、服务器搭建到第三方托管,一步步成为“代码仓库管理员”! 提示:如果不想自己搭服务器,直接看最后一部分“第三方托管”(比如GitHub、GitLab),新手也能5分钟上手~
第一部分:Git协议详解 - 数据传输的”高速公路”
⭐ 一、Git协议详解 - 选择适合你的”数据传输通道”
关键字:本地协议、HTTP/HTTPS协议、SSH协议、Git协议、优缺点对比
Git传输代码需要通过“协议”,就像寄快递选不同的快递公司——有的快、有的安全、有的便宜(免费)。Git支持4种核心协议,咱们一个个说清楚~
1. 本地协议(Local Protocol):最直接的”本地共享”
简单说就是把仓库放在本地磁盘或共享文件夹(比如公司内网的NFS服务器),其他人通过文件路径访问。
克隆本地共享目录的仓库 git clone /opt/git/project.git # 直接用路径 # 或显式指定file://协议(效率较低,一般不用) git clone file:///opt/git/project.git
趣味类比📂:
本地协议就像把文件放在U盘里传给同事——直接、不用网络,但只能近距离共享,你不在公司就没法用,而且U盘丢了(仓库损坏)就麻烦了。
优缺点速览:
- ✅ 优点:简单到极致,不用配置服务器;利用系统文件权限控制访问
- ❌ 缺点:只能本地/内网访问,远程(比如家里)用不了;共享文件夹速度可能比网络协议慢;无防护,容易误删仓库文件
2. HTTP/HTTPS协议:最通用的”跨网通道”
分为“智能HTTP(Smart HTTP)”和“ dumb HTTP(Dumb HTTP)”,现在基本都用智能版,支持读写、认证,还能通过80/443端口(防火墙一般都开放)。
克隆GitHub仓库(用HTTPS协议,最常用) $ git clone https://github.com/schacon/simplegit.git
核心特点:
- 🔹 智能HTTP:支持读写,能自动协商数据传输,像SSH一样高效;支持用户名/密码认证,不用配置密钥
- 🔹 dumb HTTP:只读,简单到把仓库放在Web服务器(如Apache)目录下就行,适合公开只读仓库
趣味类比🌐:
HTTP协议就像用浏览器上网——不管你在哪,只要能连网就能访问,输入账号密码就能操作,门槛极低,适合大多数团队。
优缺点速览:
- ✅ 优点:通用性强,跨网络访问方便;支持加密(HTTPS);认证简单(用户名/密码);防火墙友好
- ❌ 缺点:配置比SSH稍复杂;每次推送可能要输密码(可通过凭证缓存解决)
3. SSH协议:最安全的”专属通道”
SSH是最常用的Git服务器协议之一,几乎所有服务器都支持。它通过密钥认证,数据传输全程加密,安全又高效。
克隆SSH协议的仓库(两种写法) git clone user@server:project.git # 简写,更常用
新手必知⚠️:
SSH协议需要先配置“公钥/私钥”——把你的公钥放到服务器上,之后访问就不用输密码了,既安全又方便。后面会详细讲配置步骤~
趣味类比🔐:
SSH协议就像你家的智能门锁——只有持有正确“钥匙”(私钥)的人才能进门,别人进不来,而且开门过程加密,不用担心被偷看。
优缺点速览:
- ✅ 优点:安全(加密+密钥认证);高效(数据压缩传输);配置简单(大多数服务器已预装SSH)
- ❌ 缺点:不支持匿名访问(必须有服务器账号/密钥);新手需要学习密钥配置
4. Git协议:最快的”匿名通道”
Git自带的专用协议,监听9418端口,只支持只读访问,无认证,速度极快(没有加密和认证的开销)。
克隆Git协议的仓库(一般用于公开项目) $ git clone git://git.kernel.org/pub/scm/git/git.git
重要提醒❗️:
Git协议没有认证,任何人都能访问,所以只能用于公开仓库!如果开启写权限,相当于把仓库暴露在互联网上,风险极高~
优缺点速览:
- ✅ 优点:速度最快;适合大量匿名用户访问的公开项目
- ❌ 缺点:无认证(不安全);无加密;配置复杂(需要单独启动守护进程);9418端口可能被防火墙拦截
新手选择建议🧠:
👉 团队内部协作:优先选
SSH协议
(安全、高效) 👉 公开项目/跨团队协作:优先选
HTTPS协议
(通用、方便) 👉 本地小团队临时共享:用
本地协议
(简单) 👉 大型公开项目(如Linux内核):用
Git协议
(快)+ SSH协议(写权限)组合
第二部分:搭建Git服务器 - 从0到1打造专属仓库
👷 二、搭建Git服务器 - 新手也能搞定的步骤
关键字:裸仓库、SSH配置、Git守护进程、Smart HTTP、Linux服务器
咱们以最常用的
Linux服务器
为例(Ubuntu/CentOS都适用),一步步搭建支持SSH和HTTP协议的Git服务器。核心是先创建“裸仓库”(没有工作目录,只存Git数据),再配置访问权限。
1. 准备工作:创建裸仓库
Git服务器上的仓库必须是“裸仓库”(bare repository),因为它只用来存储数据,不用 checkout 代码。裸仓库目录一般以 .git 结尾。
本地创建一个项目,然后导出为裸仓库 mkdir my_project && cd my_project git init # 初始化本地仓库 touch README.md && git add . && git commit -m "initial commit" # 导出为裸仓库(--bare选项) git clone —bare my_project my_project.git # 现在my_project.git就是裸仓库,可复制到服务器
趣味类比📦:
裸仓库就像快递仓库——只负责存储包裹(代码提交),不拆开包裹(不 checkout 工作目录),这样才能高效地接收和分发包裹。
2. 配置SSH访问(最常用)
SSH是团队内部协作的首选,配置步骤分“服务器端”和“客户端”。
步骤1:服务器端配置(管理员操作)
-
- 创建git用户(专门用于Git操作,避免用root)
sudo adduser git # 创建git用户 su git # 切换到git用户 $ cd ~ # 进入git用户的家目录
-
- 创建.ssh目录,用于存储客户端公钥
mkdir .ssh && chmod 700 .ssh # 权限必须是700(仅所有者可读写执行) touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys # 权限600(仅所有者可读写)
-
- 添加客户端公钥到authorized_keys(关键步骤)
让每个团队成员发送他们的SSH公钥(~/.ssh/id_rsa.pub文件内容),然后追加到服务器的authorized_keys文件:
假设收到了john的公钥,保存为/tmp/id_rsa.john.pub $ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys # 同理添加其他成员的公钥
-
- 限制git用户只能用Git命令(禁止登录shell)
为了安全,不让git用户登录服务器shell,只允许Git操作:
查看git-shell路径 which git-shell # 输出可能是/usr/bin/git-shell # 将git用户的shell改为git-shell sudo chsh git # 输入/usr/bin/git-shell # 验证:现在用ssh登录会被拒绝,只能用Git命令 $ ssh git@server # 会提示 “Interactive git shell is not enabled.”
-
- 上传裸仓库到服务器
在本地将裸仓库复制到服务器的/opt/git目录 scp -r my_project.git git@server:/opt/git/ # 服务器上设置仓库权限(可选,让git用户有读写权限) ssh git@server git init —bare —shared # —shared开启组写权限
步骤2:客户端配置(开发者操作)
-
- 生成SSH密钥(如果没有)
$ ssh-keygen # 一路回车,不需要设置密码(也可以设置) # 生成后,公钥在~/.ssh/id_rsa.pub,私钥在~/.ssh/id_rsa
-
- 将公钥发送给服务器管理员(如上面步骤)
- 克隆服务器仓库,开始协作
克隆仓库 git clone git@server:/opt/git/my_project.git # 提交代码并推送 cd my_project vim README.md && git commit -am "update README" git push origin master # 直接推送,不用输密码
新手避坑⚠️:
- 服务器上.ssh目录和authorized_keys的权限必须是700和600,否则SSH会拒绝访问! 2. 客户端私钥(id_rsa)不能泄露,权限设置为600(chmod 600 ~/.ssh/id_rsa)
3. 配置Smart HTTP(支持匿名读+认证写)
如果需要对外提供访问(比如跨团队协作),可以配置Smart HTTP,用Apache或Nginx作为Web服务器。这里以Apache为例:
步骤1:安装Apache并启用模块
sudo apt-get install apache2 apache2-utils # Ubuntu安装Apache a2enmod cgi alias env rewrite # 启用必需模块
步骤2:配置Apache虚拟主机
sudo vim /etc/apache2/sites-available/git.conf # 添加以下内容 ServerName git.example.com # 你的服务器域名 SetEnv GIT_PROJECT_ROOT /opt/git # 仓库存放目录 SetEnv GIT_HTTP_EXPORT_ALL # 允许所有仓库通过HTTP访问 ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ # Git CGI脚本路径# 配置认证(写操作需要登录) RewriteEngine On RewriteCond %{QUERY_STRING} service=git-receive-pack [OR] RewriteCond %{REQUEST_URI} /git-receive-pack RewriteRule ^/git/ - [E=AUTHREQUIRED] <Files “git-http-backend”> AuthType Basic AuthName “Git Access” AuthUserFile /opt/git/.htpasswd # 密码文件路径 Require valid-user Order deny,allow Deny from env=AUTHREQUIRED Satisfy any
步骤3:创建密码文件(添加用户)
添加用户schacon,设置密码(会提示输入密码) htpasswd -c /opt/git/.htpasswd schacon # 后续添加其他用户,去掉-c选项 htpasswd /opt/git/.htpasswd john
步骤4:启动Apache并测试
sudo a2ensite git.conf # 启用虚拟主机 sudo service apache2 restart # 重启Apache # 客户端克隆(匿名读,不用密码) git clone http://git.example.com/git/my_project.git # 客户端推送(需要输入用户名密码) git push http://git.example.com/git/my_project.git master
复杂场景应用🌐:
生产环境中建议给HTTP配置SSL(HTTPS),避免密码和代码明文传输。可以通过Let’s Encrypt申请免费SSL证书,配置后用https://访问。
4. 配置Git守护进程(匿名只读访问)
如果需要提供匿名只读访问(比如公开开源项目),可以配置Git守护进程:
启动Git守护进程(—base-path指定仓库目录) git daemon --reuseaddr --base-path=/opt/git/ /opt/git/ # 让仓库允许被访问:在仓库目录创建git-daemon-export-ok文件 ssh git@server touch git-daemon-export-ok # 客户端克隆(无需认证) $ git clone git://server/my_project.git
安全提醒❗️:
Git守护进程无认证,只能用于只读访问!不要开启写权限,否则任何人都能推送代码篡改仓库。
第三部分:Web界面配置 - 可视化管理仓库
🖥️ 三、Web界面配置 - 让仓库管理更直观
关键字:GitWeb、GitLab、可视化管理、代码浏览
纯命令行管理仓库不够直观?可以配置Web界面,支持浏览代码、查看提交历史、管理用户权限等。常用的有GitWeb(简单)和GitLab(全功能)。
1. GitWeb:轻量级Web界面(简单易用)
Git自带的CGI脚本,配置简单,适合小型团队或个人使用。
配置步骤(Apache为例):
1. 安装GitWeb(Ubuntu) sudo apt-get install gitweb # 2. 配置GitWeb的仓库目录 sudo vim /etc/gitweb.conf # 添加:$projectroot = “/opt/git”; # 指向你的仓库目录 # 3. 配置Apache(一般安装后自动配置,无需手动修改) # 4. 访问Web界面:http://server/gitweb
访问后能看到所有仓库,点击进入可浏览代码、查看提交历史、分支情况,界面简洁明了,适合快速查看。
趣味类比📖:
GitWeb就像一本简单的代码“说明书”——能看到代码的结构和修改记录,但功能不多,适合快速查阅。
2. GitLab:全功能Git平台(企业级)
GitWeb功能太简单?GitLab是更强大的选择,支持用户管理、权限控制、合并请求(MR)、CI/CD等,相当于“自建GitHub”。
安装GitLab(推荐用Docker,新手友好):
1. 安装Docker(如果没有) sudo apt-get install docker.io # 2. 拉取GitLab镜像 sudo docker pull gitlab/gitlab-ce:latest # 3. 启动GitLab容器 $ sudo docker run -d —name gitlab \ -p 80:80 -p 443:443 -p 22:22 \ -v /srv/gitlab/config:/etc/gitlab \ -v /srv/gitlab/logs:/var/log/gitlab \ -v /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
初始配置:
- 访问http://server(服务器IP),首次登录会让你修改root密码(默认用户名root)
- 创建用户:Admin Area → Users → New User,添加团队成员
- 创建项目:点击右上角“+” → New Project,填写项目名称即可
- 克隆项目:项目页面会显示HTTPS和SSH地址,客户端直接克隆
核心功能(新手必用):
- 👥 用户/组管理:给不同用户分配不同权限(Guest/Reporter/Developer/Owner)
- 🔀 合并请求(MR):开发者提交代码到分支后,发起MR,管理员审核后合并到主分支
- 📝 Issues:跟踪任务、bug,关联代码提交
- 🔒 仓库可见性:设置私有(仅成员访问)、内部(登录用户访问)、公开(所有人访问)
企业级应用🌐:
大型团队用GitLab时,可配置LDAP认证(对接公司内部用户系统)、设置CI/CD流水线(代码提交后自动构建、测试、部署)、配置钩子(触发外部工具,如通知到企业微信)。
第四部分:第三方托管 - 不用搭服务器,直接用现成的
☁️ 四、第三方托管 - 新手首选,5分钟上手
关键字:GitHub、GitLab、Gitee、托管平台、协作流程
不想自己搭服务器、维护安全补丁?直接用第三方托管平台!它们提供现成的Git服务器、Web界面、协作工具,免费版足够小团队使用。
1. 主流托管平台对比(新手选型)
- 🌟 GitHub:全球最大的Git托管平台,开源项目多,适合个人和开源团队
- 🌟 GitLab:功能最全(免费版支持私有仓库无上限),适合企业和团队
- 🌟 Gitee(码云):国内平台,访问速度快,支持中文,适合国内团队
2. GitHub使用教程(新手入门)
步骤1:注册账号并创建仓库
- 访问https://github.com,注册账号(邮箱验证)
- 点击右上角“+” → New repository,填写仓库名称(如my-project),点击Create repository
步骤2:本地仓库关联GitHub并推送
1. 本地初始化仓库(如果没有) mkdir my-project && cd my-project git init touch README.md && git add . && git commit -m "initial commit" # 2. 关联GitHub仓库(仓库地址在GitHub项目页面复制) git remote add origin https://github.com/your-username/my-project.git # 3. 推送代码到GitHub(需要输入GitHub用户名和密码,或用SSH密钥) $ git push -u origin master
步骤3:团队协作流程(Fork + Pull Request)
如果是开源项目或跨团队协作,常用“Fork + PR”流程:
- collaborator 点击GitHub项目页面的“Fork”,复制一份到自己的仓库
- 克隆自己仓库的代码,修改后推送
- 在自己仓库页面点击“Pull Request”,向原项目发起合并请求
- 原项目管理员审核代码,通过后合并到主分支
趣味类比🤝:
Fork + PR就像“接力赛”——你先把别人的项目“复制”到自己手里(Fork),修改后“递回去”(PR),对方确认没问题后“接过来”(合并),整个过程有序又安全。
3. 常见问题解决(新手必看)
- ❓ 推送时提示“permission denied”:检查仓库权限,或用SSH密钥认证(GitHub → Settings → SSH and GPG keys → 添加公钥)
- ❓ 国内访问GitHub慢:用Gitee替代,或配置代理
- ❓ 忘记密码:在平台登录页面点击“Forgot password”,通过邮箱找回
新手建议💡:
个人学习用GitHub,国内团队协作用Gitee,企业团队用GitLab(自建或用GitLab.com)。免费版足够满足大部分需求,不用一开始就付费。
第五部分:实战场景 - 团队协作流程示例
🚀 五、实战场景 - 真实团队的Git服务器协作流程
关键字:团队协作、分支管理、权限控制、代码审核
结合前面的知识点,模拟一个10人小团队的协作流程,用GitLab作为托管平台(新手可直接套用):
场景:开发一个电商网站,使用GitLab托管代码
- 1. 管理员初始化项目
1. 管理员在GitLab创建项目ecommerce,设置为私有仓库
2. 本地克隆项目,初始化代码结构
cd ecommerce touch README.md src/index.html git add . && git commit -m "init project structure" git push origin master
3. 创建develop分支(开发主分支),保护master分支(禁止直接推送)
git push origin develop
在GitLab项目设置中,将master分支设为”Protected Branch”,只允许管理员合并
- 2. 开发者加入项目并开发功能
1. 开发者接收GitLab邀请,加入项目
2. 克隆项目,切换到develop分支
cd ecommerce $ git checkout develop
3. 创建功能分支(feature/xxx)
$ git checkout -b feature/payment
4. 开发支付功能,多次提交
vim src/payment.js && git add . && git commit -m "add alipay API" git commit -am “fix payment callback bug”
5. 推送功能分支到GitLab
$ git push origin feature/payment 3. 3. 发起合并请求(MR)并审核1. 开发者在GitLab页面,从feature/payment分支向develop分支发起MR
-
管理员/技术负责人审核代码,提出修改意见
-
开发者根据意见修改代码,推送后MR自动更新
-
审核通过后,管理员合并MR到develop分支
-
4. 测试与发布
1. 合并后,删除功能分支(本地+远程)
git pull origin develop git push origin —delete feature/payment
2. 测试通过后,从develop分支向master分支发起MR
3. 管理员审核通过,合并到master分支,打标签(版本号)
git pull origin master git push origin v1.0 5. 5. 紧急修复bug
1. 从master分支创建hotfix分支
git checkout -b hotfix/login-error
2. 修复登录bug,推送分支
vim src/login.js && git commit -am "fix login failed bug" git push origin hotfix/login-error
3. 发起MR到master和develop分支,合并后删除hotfix分支
流程亮点🌐:
- 保护master分支,避免直接推送导致代码混乱 2. 功能开发在feature分支,通过MR审核后合并,保证代码质量 3. hotfix分支同时合并到master和develop,避免bug重复出现 4. 所有操作都在GitLab上留痕,方便追溯和管理
总结与交付物提议
🎯 六、总结 - Git服务器核心技能图谱
Git服务器是团队协作的核心,掌握这些知识点就能应对大部分场景:
- 💡 协议选择:内部协作选SSH,跨网/公开项目选HTTPS
- 💡 服务器搭建:新手用第三方托管(GitHub/Gitee/GitLab),进阶自建GitLab
- 💡 协作流程:分支隔离(master/develop/feature/hotfix)+ MR审核
- 💡 安全要点:SSH密钥认证、仓库权限控制、保护主分支
要不要我帮你整理一份
Git服务器搭建与协作速查表
?包含SSH配置、GitLab常用操作、团队协作流程模板,打印出来就能直接用,帮你快速落地到实际项目中~