· 技术教程  · 8 min read

Gitea 全方位使用与双仓库同步推送教程

本教程涵盖Gitea从入门到精通的完整流程,包括基础使用、SSH配置、双仓库推送设置,以及实现一键同步推送到GitHub和Gitea的高级技巧。

本教程涵盖Gitea从入门到精通的完整流程,包括基础使用、SSH配置、双仓库推送设置,以及实现一键同步推送到GitHub和Gitea的高级技巧。

前言

本教程假设你已经成功在自己的服务器上安装并运行了 Gitea。我们将分为三个部分:

  1. Gitea 基础使用:涵盖从创建仓库到日常代码管理的完整流程
  2. 配置双仓库推送:教你如何将一个本地项目同时关联到 Gitea 和 GitHub
  3. 实现一键同步:通过修改 Git 配置,实现 git push 命令同时推送到两个平台

第一部分:Gitea 基础使用入门

1. 首次登录与配置 SSH 密钥

这是连接你本地电脑和 Gitea 服务器的”钥匙”。

登录 Gitea: 用浏览器访问 http://YOUR_SERVER_IP:3000 并登录。

获取本地公钥: 在你的本地电脑终端上,运行以下命令并复制整行输出内容:

cat ~/.ssh/id_ed25519.pub
# 或者
cat ~/.ssh/id_rsa.pub

在 Gitea 中添加公钥:

  1. 在 Gitea 网页右上角,点击你的头像 → “设置”
  2. 在左侧菜单选择 “SSH / GPG 密钥”
  3. 点击 “增加密钥”,将复制的公钥粘贴进去,起个名字(如 “My MacBook”),然后保存

2. 创建你的第一个 Gitea 仓库

  1. 在 Gitea 首页,点击右上角的 + 号 → “新建仓库”
  2. 仓库所有者:选择你自己
  3. 仓库名称:填写项目名称,如 my-first-gitea-project
  4. 可见性:选择”私有”或”公开”
  5. 初始化仓库:建议勾选此项,并选择一个 .gitignore 模板(如 Node 或 Python)和许可证(如 MIT)
  6. 点击”创建仓库”

3. 克隆仓库到本地并进行第一次提交

复制 SSH 克隆地址: 在新建的 Gitea 仓库页面,找到并复制 SSH 克隆地址,它看起来像:

ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-first-gitea-project.git

克隆并提交:

# 克隆仓库
git clone ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-first-gitea-project.git

# 进入项目目录
cd my-first-gitea-project

# 进行修改并提交
echo "Hello Gitea" > README.md
git add .
git commit -m "My first commit to Gitea"
git push

刷新 Gitea 页面,你会看到新的提交已经同步上去了。

至此,你已经掌握了 Gitea 最核心的日常使用方法!

第二部分:配置双仓库推送

现在,我们来处理一个已经存在的、之前推送到 GitHub 的本地项目,让它也能推送到 Gitea。

1. 准备工作

  • 本地项目:假设你本地已经有一个项目 my-existing-project,它之前只关联了 GitHub
  • Gitea:在 Gitea 网站上创建一个新的空仓库,不要勾选”初始化仓库”。仓库名最好与本地项目一致
  • GitHub:你的项目在 GitHub 上已经存在

2. 添加 Gitea 为新的远程仓库

进入你本地的 my-existing-project 项目目录:

# 查看当前的远程仓库
git remote -v

你会看到 origin 指向 GitHub。

从 Gitea 复制你新建的空仓库的 SSH 地址,然后添加一个新的远程仓库:

# 语法: git remote add <新别名> <Gitea仓库SSH地址>
git remote add gitea ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-existing-project.git

再次用 git remote -v 检查,你会发现 origin (GitHub) 和 gitea (Gitea) 已经并存了。

3. 推送代码到 Gitea

现在,我们将本地的所有代码历史一次性推送到 Gitea:

# --all 推送所有分支
git push --all gitea

# --tags 推送所有标签
git push --tags gitea

完成后,Gitea 上的仓库就和你的本地项目以及 GitHub 上的内容完全一致了。

4. 日常双仓库推送

现在,当你有了新的提交后,需要手动推送到两个远程仓库:

# 推送到 GitHub
git push origin main

# 推送到 Gitea
git push gitea main

虽然可行,但这有点繁琐。接下来,我们实现一键搞定。

第三部分:实现一键同步推送

我们将通过修改 Git 的 remote 配置,让一个别名(比如 origin)同时指向两个 URL。

方法一:修改 origin,让它同时指向 Gitea 和 GitHub

这是最推荐的方法,因为 origin 是最常用的别名。

步骤:

  1. 进入你的本地项目目录

  2. 首先,确保 origin 已经指向了你的主仓库(比如 GitHub):

    git remote set-url origin https://github.com/your-github-username/my-existing-project.git
  3. 然后,添加 Gitea 的 URL 到 origin 的推送目标中:

    # 语法: git remote set-url --add --push origin <要添加的URL>
    git remote set-url --add --push origin ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-existing-project.git

    --push 参数意味着这个 URL 只在 push 时生效,pull 和 fetch 仍只从第一个 URL 获取。

  4. 验证配置: 查看 .git/config 文件,或者用 git remote -v。你会看到 push URL 有两个,而 fetch 只有一个:

    origin  https://github.com/your-github-username/my-existing-project.git (fetch)
    origin  https://github.com/your-github-username/my-existing-project.git (push)
    origin  ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-existing-project.git (push)

一键推送! 现在,当你进行本地提交后,只需执行一次我们最熟悉的命令:

git push origin main

Git 会自动将你的提交依次推送到 GitHub 和 Gitea!

方法二:创建一个新的”全能”远程别名

如果你不想修改 origin,可以创建一个新的别名,比如 all,让它指向两个仓库。

步骤:

  1. 首先添加 githubgitea 两个独立的远程仓库(如果还没加的话):

    git remote add github https://github.com/your-github-username/my-existing-project.git
    git remote add gitea ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-existing-project.git
  2. 手动编辑配置文件 .git/config

    nano .git/config
  3. 在文件末尾添加以下内容:

    [remote "all"]
        url = https://github.com/your-github-username/my-existing-project.git
        url = ssh://git@YOUR_SERVER_IP:222/your_gitea_username/my-existing-project.git
  4. 保存文件。现在,你可以使用 all 这个别名来一键推送了:

    git push all main

总结

通过本教程,你已经掌握了:

  1. Gitea 基础操作:从创建仓库到日常代码管理
  2. 双仓库配置:同时关联 GitHub 和 Gitea
  3. 一键同步推送:通过巧妙的 Git 配置实现效率提升

这种双仓库策略特别适合:

  • 需要代码备份的开发者
  • 希望同时利用不同平台特性的团队
  • 从 GitHub 迁移到自建 Gitea 的过渡期

掌握这些技巧,你就能在代码管理上更加得心应手,既享受自建服务的隐私和控制权,又不失去主流平台的便利性。

扩展阅读

Back to Blog

Related Posts

View All Posts »