前面咱们学了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:服务器端配置(管理员操作)

    1. 创建git用户(专门用于Git操作,避免用root)

sudo adduser git # 创建git用户 su git # 切换到git用户 $ cd ~ # 进入git用户的家目录

    1. 创建.ssh目录,用于存储客户端公钥

mkdir .ssh && chmod 700 .ssh # 权限必须是700(仅所有者可读写执行) touch .ssh/authorized_keys && chmod 600 .ssh/authorized_keys # 权限600(仅所有者可读写)

    1. 添加客户端公钥到authorized_keys(关键步骤)

让每个团队成员发送他们的SSH公钥(~/.ssh/id_rsa.pub文件内容),然后追加到服务器的authorized_keys文件:

假设收到了john的公钥,保存为/tmp/id_rsa.john.pub $ cat /tmp/id_rsa.john.pub >> ~/.ssh/authorized_keys # 同理添加其他成员的公钥

    1. 限制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.”

    1. 上传裸仓库到服务器

在本地将裸仓库复制到服务器的/opt/git目录 scp -r my_project.git git@server:/opt/git/ # 服务器上设置仓库权限(可选,让git用户有读写权限) ssh git@server git init —bare —shared # —shared开启组写权限

步骤2:客户端配置(开发者操作)

    1. 生成SSH密钥(如果没有)

$ ssh-keygen # 一路回车,不需要设置密码(也可以设置) # 生成后,公钥在~/.ssh/id_rsa.pub,私钥在~/.ssh/id_rsa

    1. 将公钥发送给服务器管理员(如上面步骤)
    2. 克隆服务器仓库,开始协作

克隆仓库 git clone git@server:/opt/git/my_project.git # 提交代码并推送 cd my_project vim README.md && git commit -am "update README" git push origin master # 直接推送,不用输密码

新手避坑⚠️:

  1. 服务器上.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

初始配置:

  1. 访问http://server(服务器IP),首次登录会让你修改root密码(默认用户名root)
  2. 创建用户:Admin Area → Users → New User,添加团队成员
  3. 创建项目:点击右上角“+” → New Project,填写项目名称即可
  4. 克隆项目:项目页面会显示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:注册账号并创建仓库

  1. 访问https://github.com,注册账号(邮箱验证)
  2. 点击右上角“+” → 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”流程:

  1. collaborator 点击GitHub项目页面的“Fork”,复制一份到自己的仓库
  2. 克隆自己仓库的代码,修改后推送
  3. 在自己仓库页面点击“Pull Request”,向原项目发起合并请求
  4. 原项目管理员审核代码,通过后合并到主分支

趣味类比🤝:

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. 管理员初始化项目

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”,只允许管理员合并

  1. 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

  1. 管理员/技术负责人审核代码,提出修改意见

  2. 开发者根据意见修改代码,推送后MR自动更新

  3. 审核通过后,管理员合并MR到develop分支

  4. 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分支

流程亮点🌐:

  1. 保护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常用操作、团队协作流程模板,打印出来就能直接用,帮你快速落地到实际项目中~