Gitea的安装和配置以及应用

news2025/4/18 1:59:58

Gitea的安装和配置以及应用

一、安装

1、创建数据库和数据库账户(pg)

su – postgres -c "psql" 
CREATE ROLE gitea WITH LOGIN PASSWORD 'gitea';
CREATE DATABASE giteadb WITH OWNER gitea TEMPLATE template0 ENCODING UTF8 LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8';

2、下载gitea,给与可执行权限

wget -O gitea https://dl.gitea.com/gitea/1.23.6/gitea-1.23.6-linux-amd64
chmod +x gitea
cp gitea /usr/local/bin/gitea

3、创建系统用户

adduser \
   --system \
   --shell /bin/bash \
   --gecos 'Git Version Control' \
   --group \
   --disabled-password \
   --home /home/git \
   git

4、创建相关目录

mkdir -p /var/lib/gitea/{custom,data,log}
chown -R git:git /var/lib/gitea/
chmod -R 750 /var/lib/gitea/
mkdir /etc/gitea
chown root:git /etc/gitea
chmod 770 /etc/gitea

5、创建服务Gitea

sudo vim /etc/systemd/system/gitea.service

[Unit]
Description=Gitea
After=postgresql.service

[Service]
User=git
Group=git
Environment="GITEA_WORK_DIR=/var/lib/gitea"
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always

[Install]
WantedBy=multi-user.target

6、激活gitea 并将它作为系统自启动服务

sudo systemctl enable gitea
sudo systemctl start gitea

7、初始化

访问域名,完成Gitea的初始化

http://192.168.1.215:3000/

在这里插入图片描述

在这里插入图片描述

第一个注册的账号是管理员账号。

8、修改配置文件

配置文件在/etc/gitea/app.ini

#service 下增加这一行: 不允许匿名的push
ENABLE_ANONYMOUS_GIT_PUSH = FALSE
# 修改log模式为file
MODE = file

9、windows下git安装

https://git-scm.com/downloads/win

二、小团队最佳实践

以下由deepseek生成。

1、Fork + Pull Request VS 直接Push到主仓库

小团队10人左右内部通过gitea构建git服务器,有两种使用方式:1、每个人从主仓库fork到个人仓库下,然后修改代码后push到自己的个人仓库,再通过pull request提交的主仓库。 2、直接从主仓库pull代码,修改后直接push到主仓库。 哪种方式比较好?

对于10人左右的小团队使用Gitea构建Git服务器,两种协作方式的优劣对比如下,最终建议需结合团队具体情况:

### **方式1:Fork + Pull Request 模式**
**优点:**
1. **代码审查严格**:所有变更必须通过PR合并,便于团队讨论和代码质量把控。
2. **权限控制灵活**:主仓库可限制直接Push,仅维护者能合并PR,适合开源项目或严格权限管理的场景。
3. **隔离性高**:个人开发在独立仓库完成,避免直接污染主分支。
4. **历史清晰**:PR记录可追溯代码修改意图和讨论过程。

**缺点:**
1. **流程复杂**:需频繁同步主仓库变更(需手动添加Upstream远程并拉取)。
2. **效率较低**:小修改也需走PR流程,可能影响快速迭代。

### **方式2:直接Push到主仓库**
**优点:**
1. **简单高效**:适合高频协作的小团队,快速完成代码共享。
2. **减少操作成本**:无需维护Fork仓库,同步代码更直接。

**缺点:**
1. **风险较高**:误操作可能导致主分支损坏(需通过分支保护规则缓解)。
2. **缺乏强制审查**:依赖成员自觉,代码质量可能参差不齐。

---

### **综合建议:**
1. **推荐方式2(直接Push)+ 分支保护**  
   - **适用场景**:团队成员熟悉Git、信任度高、追求效率。  
   - **优化措施**:  
     - 主仓库设置 `main`/`master` 分支为**保护分支**,仅允许通过PR合并(需Gitea权限支持)。  
     - 日常开发在**非保护分支**(如 `dev` 或 `feature-xxx`)直接Push,定期通过PR合并到主分支。  
     - 结合Code Review:即使直接Push,也要求团队成员互相审查后再合并。

2. **方式1(Fork+PR)的适用场景**  
   - 团队中有新人需要学习Git工作流。  
   - 项目为开源或需要严格权限隔离(如部分成员仅限只读)。  

### **补充最佳实践**
- **分支策略**:无论哪种方式,建议采用 `main` + `feature` 分支,避免直接在主分支开发。  
- **自动化工具**:通过Gitea的Webhook触发CI/CD,确保PR或Push后自动运行测试。  
- **文档规范**:明确团队协作规则,例如提交信息格式、PR描述模板等。

最终,**方式2(直接Push + 分支保护)更适合小团队高效协作**,同时通过技术约束(保护分支)和流程规范(非强制Code Review)平衡灵活性与安全性。

2、gitea的核心概念

在 Gitea 中,**组织(Organization)** 是一个用于集中管理多个仓库和团队成员的概念,类似于 GitHub/GitLab 中的组织或群组。它适用于团队协作,可以更灵活地管理权限、仓库和成员。以下是 Gitea 中组织的核心概念和功能:

---

### **1. 组织的作用**
- **团队协作**:将多个用户(成员)归集到一个组织下,统一管理仓库和权限。
- **权限隔离**:组织可以拥有独立的仓库、团队(Teams)和访问控制,与个人用户(User)的仓库分离。
- **资源归类**:适用于公司、开源项目、部门等场景,所有相关仓库集中在组织名下(如 `org-name/repo-name`)。

---

### **2. 组织 vs 个人用户**
| **特性**       | **组织(Organization)**       | **个人用户(User)**          |
|----------------|-------------------------------|-----------------------------|
| **所有者**     | 由用户创建和管理              | 个人账户                    |
| **仓库归属**   | 属于组织(而非个人)          | 属于个人                    |
| **权限管理**   | 通过**团队(Teams)**分层控制 | 直接管理个人仓库的协作者    |
| **用途**       | 团队协作、公司项目            | 个人开发                    |

---

### **3. 组织的核心功能**
#### **(1)团队(Teams)**
- 组织内可以创建多个团队(如 `Developers`、`Admins`),每个团队可以分配不同的权限(读、写、管理员等)。
- 成员可以属于多个团队,权限叠加(最高权限优先)。

#### **(2)仓库管理**
- 组织可以拥有多个仓库,仓库的访问权限由团队控制。
- 示例:  
  - `Admins` 团队:对全部仓库有管理员权限。  
  - `Developers` 团队:只能推送(Push)到指定仓库。  

#### **(3)成员角色**
- **所有者(Owner)**:组织的最高管理者,可修改组织设置、删除组织。
- **成员(Member)**:普通成员,权限由所属团队决定。

---

### **4. 典型使用场景**
#### **场景1:公司内部开发**
- 创建一个组织(如 `my-company`),下设团队:  
  - `backend-team`:拥有后端仓库的写入权限。  
  - `frontend-team`:拥有前端仓库的写入权限。  
  - `qa-team`:仅限读取仓库。  

#### **场景2:开源项目**
- 组织名(如 `awesome-project`)作为项目官方命名空间。  
- 通过团队控制核心开发者(Maintainers)和贡献者(Contributors)的权限。

---

### **5. 如何创建和管理组织?**
1. **创建组织**:  
   - 登录 Gitea → 点击右上角 `+` → 选择 `New Organization`。  
2. **添加成员**:  
   - 进入组织 → `Members` → 邀请用户。  
3. **创建团队**:  
   - 进入组织 → `Teams` → 定义权限(Read、Write、Admin)。  
4. **分配仓库**:  
   - 在团队设置中关联仓库,或直接在仓库设置中授权团队。

---

### **6. 最佳实践**
- **最小权限原则**:按需分配团队权限(如避免直接给全员 `Admin`)。  
- **仓库命名规范**:如 `org-name/project-name` 提高辨识度。  
- **结合分支保护**:在组织仓库中设置保护分支,确保代码安全。

---

### **总结**
Gitea 的**组织**是团队协作的核心单元,通过**团队(Teams)**实现灵活的权限管理,适合多人协作的项目。对于10人左右的小团队,建议:  
1. 创建一个组织集中管理所有仓库。  
2. 根据角色划分团队(如 `Devs`、`Leads`),而非直接赋予个人权限。  
3. 结合分支保护 + PR 流程(即使直接Push到非保护分支)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2331175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

$_GET变量

$_GET 是一个超级全局变量,在 PHP 中用于收集通过 URL 查询字符串传递的参数。它是一个关联数组,包含了所有通过 HTTP GET 方法发送到当前脚本的变量。 预定义的 $_GET 变量用于收集来自 method"get" 的表单中的值。 从带有 GET 方法的表单发…

TBE(TVM的扩展)

算子 张量 一个张量只有一种数据类型 在内存中只能线性存储,最终形成一个长的一维数组 晟腾AI的数据格式 AIPP是对我们常见的数据格式转化成AI core支持的数据格式 广播机制 TVM TBE的第一种开发方式:DSL TBE的第二种开发方式:TVM TBE的第…

【Function Calling与Tool Calling】深度解析大模型智能中枢的架构革命

目录 一、范式转移:从对话引擎到智能中枢 二、核心技术解析 2.1 Function Calling技术栈 2.2 Tool Calling实现模式 三、企业级应用架构设计 3.1 智能工单系统案例 3.2 性能优化策略 四、安全与治理框架 4.1 权限控制矩阵 4.2 审计追踪设计 五、开发者实…

知识表示方法之六:过程表示法(Procedural Representation)

在人工智能的发展史中,关于知识的表示方法曾存在两种不同的观点。一种观点认为知识主要是陈述性的,其表示方法应着重将其静态特性,即事物的属性以及事物间的关系表示出来,称以这种观点表示知识的方法为陈述式或说明式表示法&#…

sql-labs靶场 less-2

文章目录 sqli-labs靶场less 2 联合注入 sqli-labs靶场 每道题都从以下模板讲解,并且每个步骤都有图片,清晰明了,便于复盘。 sql注入的基本步骤 注入点注入类型 字符型:判断闭合方式 (‘、"、’、“”&#xf…

git clone(复制)下载

1、复制 下载地址 2、打开网页,点击 克隆/下载按扭 3、按提示复制命令行到终端 4、VS里打开终端,并粘贴以下命令 5、 下载完毕 6、复制文件夹到你选定的位置 7、用VSCODE打开文件夹,开始你接下来的工作

Android设置adjustResize时无法生效 解决办法

删除Activity类下执行全屏的一行参数。 将图中这段Activity类中执行命令给删除就解决了。 注意关闭后状态栏和导航栏的透明度就无法自动处理了&#xff0c;需要到values和values-night下的themes.xml手动设置状态栏背景颜色。 <item name"android:statusBarColor"…

按键长按代码

这些代码都存放在定时器中断中。中断为100ms中断一次。 数据判断&#xff0c;看的懂就看吧

优选算法第八讲:链表

优选算法第八讲&#xff1a;链表 1.链表常用操作和技巧总结2.两数相加3.两两交换链表中的节点4.重排链表5.合并k个升序链表6.k个一组翻转链表 1.链表常用操作和技巧总结 2.两数相加 3.两两交换链表中的节点 4.重排链表 5.合并k个升序链表 6.k个一组翻转链表

4S店汽车维修保养管理系统 (源码+lw+部署文档+讲解),源码可白嫖!

摘要 二十一世纪我们的社会进入了信息时代&#xff0c;信息管理系统的建立&#xff0c;大大提高了人们信息化水平。传统的管理方式已经与当今4S店汽车维修保养管理系统的业务需求不相适应,也与4S店汽车维修保养管理系统化建设的发展趋势不相适应。本文针对这一需求设计并实现了…

【NLP 面经 8】

目录 一、文本生成任务 模型架构方面 训练数据方面 生成策略方面 二、命名实体识别任务NER 模型架构方面 特征工程方面 训练优化方面 三、情感分析任务 模型架构方面 训练数据方面 超参数调整方面 四、计算余弦相似度并添加符合条件结果 提示&#xff1a; 思路与算法 任由深渊的…

UE5学习笔记 FPS游戏制作43 UI材质

文章目录 实现目标制作UI材质使用UI材质 实现目标 把图片变为灰色 制作UI材质 右键新建一个材质 左侧细节栏&#xff0c;材质域改为用户界面&#xff0c;混合模式改为半透明 此时输出节点应该有两个属性 在内容浏览器里找到要用的图片&#xff0c;然后向上拖动到材质标题…

12、主频和时钟配置实验

一、I.MX6U 时钟系统详解 1、系统时钟来源 开发板的系统时钟来源于两部分: 32.768KHz 和24MHz 的晶振,其中 32.768KHz 晶振是 I.MX6U 的 RTC 时钟源, 24MHz 晶振是 I.MX6U 内核和其它外设的时钟源。 2、7路PLL时钟源 I.MX6U 的外设有很多,不同的外设时钟源不同, NXP 将…

2025 年河北交安安全员考试:巧用行业报告丰富知识储备​

河北交通行业发展迅速&#xff0c;各类行业报告蕴含大量有价值信息。考生可从河北省交通运输行业发展报告、安全专项检查报告等资料入手。在行业发展报告中&#xff0c;了解本省交通建设规模、重点项目规划等内容&#xff0c;这些信息与交安安全员工作紧密相关。比如&#xff0…

​2025快递业绿色包装创新发展论坛(上海)将于9月3日举办

​2025快递业绿色包装创新发展论坛&#xff08;上海&#xff09;将于9月3日举办 为进一步推进快递包装标准化、循环化、减量化、无害化转型&#xff0c;促进邮政快递业绿色低碳发展&#xff0c;在“2025 快递物流新质生产力发展论坛暨 2025 长三角国际快递物流供应链与智能装备…

stm32+esp8266+机智云手机app

现在很多大学嵌入式毕设都要求云端控制&#xff0c;本文章就教一下大家如何使用esp8266去连接机智云的app去进行显示stm32的外设传感器数据啊&#xff0c;控制一些外设啊等。 因为本文章主要教大家如何移植机智云的代码到自己的工程&#xff0c;所以前面的一些准备工作&#x…

【android bluetooth 框架分析 01】【关键线程 1】【关键线程介绍】

1. 为什么学习蓝牙协议栈之前&#xff0c;必须先梳理清楚这几大线程&#xff1f; 为什么 学习协议栈之前 最好是要先梳理清楚 关键线程 bt_stack_manager_threadbt_jni_threadbt_main_threadbt_a2dp_sink_worker_thread 1.1 蓝牙协议栈是典型的“多线程异步系统” 蓝牙协议…

CAS与sychronized优化

文章目录 CAS优化sychronized优化 CAS优化 CAS 优化过程: CAS是一种乐观锁机制&#xff0c;它通过比较内存中的值与预期值是否一致来决定是否更新。如果一致&#xff0c;则更新&#xff1b;如果不一致&#xff0c;则说明有其他线程修改了该值&#xff0c;CAS操作失败&#xff…

软考中级-软件设计师 2023年上半年下午题真题解析:通关秘籍+避坑指南

&#x1f4da; 目录&#xff08;快速跳转&#xff09; 大题&#xff08;下午题&#xff09;&#xff08;每题15分&#xff0c;共75分&#xff09;一、数据流图/数据库设计 &#x1f4be;&#x1f33e; 试题一&#xff1a;农事管理服务平台数据流分析问题1&#xff1a;实体识别问…

数据结构|排序算法(二)插入排序 希尔排序 冒泡排序

一、插入排序 1.算法思想 插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;其基本思想是&#xff1a;将待排序的元素插入到已经有序的序列中&#xff0c;从而逐步构建有序序列。 具体过程如下&#xff1a; 把待排序的数组分为已排序和未排…