diff --git a/docs/ch0/index.md b/docs/ch0/index.md index cd270a5..8b13789 100644 --- a/docs/ch0/index.md +++ b/docs/ch0/index.md @@ -1,13 +1 @@ -# S0: 无意识使用阶段 - **目标** :认识到开源已融入生活,了解自己日常使用的开源软件。 - -## 一、开源无处不在 - -1. **举例说明** :列举现代科技各领域广泛运用的开源软件实例,像以 Linux 为基础构建的 Android 系统,广受欢迎的浏览器 Chrome 和 Firefox,实用的办公工具 LibreOffice,还有开发人员常用的开发工具诸如 Git、Vim、Node.js 等。通过这些具体案例,展现开源软件在日常生活中的广泛存在。 -2. **说明开源如何成为现代技术的基石** :深入阐述开源在诸如手机、服务器、云计算、大数据、人工智能等前沿领域所发挥的基础性、支撑性作用,揭示开源对于现代技术发展的不可或缺性。 - -## 二、参考任务 - -1. **列举自己日常使用的一些开源软件,并尝试查找它们的开源主页或仓库** :引导读者主动去发现身边的开源软件,并通过查找其开源主页或仓库,进一步深入了解这些软件背后的开源生态。 -2. **调研一个开源项目的背景,了解它在行业中的应用(如 Linux、Kubernetes)** :促使读者选取典型开源项目,如 Linux 或 Kubernetes,深入探究其起源、发展历程,以及在所属行业中的广泛应用,加深对开源项目影响力的认知。 diff --git a/docs/ch1/index.md b/docs/ch1/index.md index cce7576..e69de29 100644 --- a/docs/ch1/index.md +++ b/docs/ch1/index.md @@ -1,318 +0,0 @@ -# 什么是开源?(What) - -## 课程目标 -1. 理解开源的多元定义(技术、模式、文化) -2. 通过真实案例感知开源的影响力 -3. 激发参与开源的兴趣 - -## 一、教学设计 -1. **互动投票** - - 工具:使用在线工具让学生投票选择日常使用的软件:Chrome、安卓手机、VS Code、Firefox等,揭晓答案均为开源或基于开源。 - - 可以进行提几个与开源有关的问题:如最几年最火热的开源软件有什么?,最后一个问题以同学认为这个世界的软件开发以什么为主导,占了多大的比例为结尾,问题答案通过数据冲击:展示“全球97%的软件开发依赖开源代码”等统计数据。 -2. **沉浸式故事** - - **视频片段**:插入[Linux诞生纪录片](视频链接) - -## 二、开源的形式 - -### 1.开源作为一种软件类型(OSI定义) ---- - -## 🔍 **官方定义:OSI的黄金标准** -**开放源代码促进会(OSI)**对开源软件的明确定义: -> "开源软件是指其**源代码可被自由查阅、修改和分发**的软件,且必须满足以下所有条件——" - ---- - -## 📜 **OSD核心条款(简化版)** -Open Source Definition(OSD)的十大原则可浓缩为四大核心: - -| 核心原则 | 关键要求 | 反例警示⚠️ | -|------------------------|--------------------------------------------------------------------------|--------------------------| -| **自由再分发** | 允许任意形式的分发(包括商业销售) | 禁止转售的软件 | -| **源代码公开** | 必须提供源代码,且禁止混淆或刻意设置编译障碍 | 只提供二进制文件的软件 | -| **允许衍生作品** | 允许修改源代码并发布修改后的版本(可附加合理限制) | 禁止二次开发的许可证 | -| **无歧视性限制** | 不得针对特定人群/领域/技术进行限制(如"不得用于军事用途"条款无效) | 限制用户职业的软件协议 | - ---- - 从课堂导入我们不难发现,从计算机的诞生,到如今的互联网时代,或者说以后的数字世界, - 开源的软件架构充斥这个万物互联的世界发方方面面,它们可能就像数字世界的大基建的一种方式, - 但同样在这个数字世界的大开发时代还有另外一种基建方式-闭源。 - -### 核心概念 -```diff -+ 开源软件 = 源代码开放 + 允许自由使用/修改/分发(OSI定义) -- 闭源软件 = "黑箱"操作 + 使用受限 -``` -### 互联网早期的开源与闭源格局:分层解析 - ---- - -#### 🌍 **基础设施层:开放协议主导** -1. **TCP/IP协议栈**(1970s) - - 由DARPA资助开发,**协议标准完全开放**,允许任何机构自由实现 - - 关键作用:奠定互联网互联互通的基石 - - 典型案例:BSD UNIX对TCP/IP协议栈的开源实现(1980s) - -2. **电子邮件系统** - - SMTP/POP3协议开放,但早期实现混合开源与闭源 - - 闭源案例:Lotus Notes的邮件系统(1989) - - 开源先驱:Sendmail(1983)成为邮件服务器事实标准 - ---- - -#### 💻 **操作系统层:闭源商业软件的霸权** -| 系统 | 性质 | 关键事件 | -|-------------|---------|-----------------------------| -| UNIX | 初期闭源 | AT&T禁止大学传播源码(1979) | -| DOS/Windows | 完全闭源 | 微软通过闭源绑定IBM PC(1981)| -| VMS | 闭源 | DEC专用系统,影响早期网络架构| - -**例外突破**:BSD UNIX(1977)从AT&T UNIX衍生出开源分支,孕育了FreeBSD/NetBSD - ---- - -#### 🕸️ **应用层:开放与封闭的拉锯战** -- **闭源主导领域** - - 浏览器大战:Netscape初期闭源(1994),后开源为Mozilla(1998) - - 办公软件:微软Office(1989)完全闭源统治市场 - -- **开源亮点** - - Apache HTTP Server(1995):快速击败闭源的Netscape Enterprise Server - - Perl语言(1987):开源脚本语言成为早期Web开发支柱 - ---- - -#### 🔄 **文化基因:开放协作的暗流** -- **RFC文化**(始于1969) - - 互联网工程任务组(IETF)通过**公开征求意见稿**推动技术演进 - - 典型案例:HTTP/1.0规范以RFC 1945形式发布(1996) - -- **黑客伦理**的影响 - - MIT AI实验室等机构倡导代码共享(如ITS操作系统) - - 1983年Richard Stallman发起GNU计划,标志着**现代开源运动的觉醒** - ---- - -#### 📊 关键转折点时间轴 - 1969 : ARPANET诞生(开放协议) - 1979 : AT&T收紧UNIX授权 - 1983 : GNU宣言发布 - 1985 : FSF成立,GPL协议诞生 - 1991 : Linux内核首次发布 - 1995 : Apache超越闭源服务器 - 1998 : "开源"一词正式诞生 - - -#### 总结与思考 -深度思考:为什么基础设施更早开放? -- 军事科研需求:ARPANET需要跨机构协作,开放协议是刚需 -- 商业价值滞后:早期互联网未形成明确盈利模式,企业缺乏闭源动力 -- 学术共同体传统:大学与研究机构长期奉行知识共享原则 - -**总结**:互联网的骨子里流淌着开放血液,但在商业化浪潮中,闭源软件曾一度占据应用层高地。这种基础设施开放+上层应用封闭的二元结构,正是数字时代最根本的技术政治博弈场。 - - -### 2.开源是一种协作与创新模式—— 从代码到文明的协作范式 - - -## 🛠️ 始于软件世界的协作革命:开源开发模式三阶跃迁 - -```mermaid -flowchart TD - A[软件类型] --> B{开发方式} - B --> C[代码开放] - C --> D[协作模式] - D --> E[创新范式] - E --> F[复杂系统协作] - F --> G[人类文明工程] -``` -## 软件层:开源开发的协作密码 -**传统闭源开发** -- 典型特征: - + 代码仅限内部团队访问 - + 严格的知识产权保护 - - 案例:Windows 95开发时期 - -**企业内部开源(Inner Source** -+ 核心逻辑: - ! 对外闭源,但内部采用开源协作方式 - ! 跨团队共享代码库,允许内部PR - + 案例: - - 微软:通过"One Engineering System"实现内部开源 - - 沃尔玛:内部开源电商平台代码加速门店系统开发 - -**完全开源** -+ 黄金标准: - ! 代码完全公开,接受全球贡献 - ! 必须符合OSI定义 - + 案例:Linux内核,Vue.js框架 - -### 💡 认知升级:协作模式的元规则 - -通过解剖不同协作模式的 "基因序列",理解开源不是如今世界非黑即白的选择,而是在可持续性与普惠的动态平衡中寻找最优解。 - -### 不同模式的核心差异点 - -| 维度 | 传统闭源 | Inner Source | 完全开源 | -| -------- | -------- | ------------ | -------- | -| 透明度 | 黑箱操作 | 组织内透明 | 全网公开 | -| 创新来源 | 内部研发 | 跨部门协同 | 全球智慧 | -| 进化速度 | 线性增长 | 多项式增长 | 指数级增长 | -| 案例代表 | Oracle | 微软 Azure | TensorFlow | - -## 社会层:开源思维的跨界迁移 -🌍 超越代码:人类协作的元模式 -### 现实世界中的「开源式协作」 -1. **古罗马引水渠建设** - - 不同城邦共享水利工程技术 - - 改进方案刻在公共石碑上(古代版Git Commit) - -2. **维基百科编辑** - - 任何人可编辑条目(类似Pull Request) - - 讨论页记录争议解决过程(人类版Code Review) - -3. **新冠疫苗研发** - - 全球实验室共享病毒基因序列(生物开源) - - 开放论文预印本加速科研进程 - -# 协作要素对比表 - -| 工程 | 协作工具 | 知识管理方式 | 质量控制手段 | -| ------------ | -------------------- | ----------------| ------------------ | -| 金字塔建造 | 象形文字图纸 | 师徒口耳相传 | 监工现场测量 | -| Linux 开发 | Git 版本控制 | 代码审查 + 文档 | CI/CD 自动化测试 | -| 新冠疫苗研发 | Slack/Zoom | 预印本快速共享 | 多中心临床试验 | - -### 人类复杂工程协作史 -```mermaid -timeline - title 协作模式进化史 - 公元前2560年 : 金字塔建造 - 1406年 : 紫禁城建设 - 1969年 : 阿波罗计划 - 1991年 : Linux内核开发(全球分布式协作) -``` - - -# 🔍 深度对比:金字塔 vs Linux内核 - -| 维度 | 古埃及金字塔建造 | Linux内核开发 | -| ------------ | ------------------------------ | ------------------------------ | -| 协作规模 | 10万劳工+数百工程师 | 16000+贡献者 | -| 知识管理 | 象形文字记录在莎草纸上 | Git提交记录在GitHub | -| 质量控制 | 监工现场检查石块 | CI/CD自动化测试,社区反馈,人工审查 | -| 传承方式 | 师徒制手把手传授 | 代码审查+开发者文档 | -| 核心动力 | 法老的绝对权威 | 技术领导力+社区共识 | - -"当建造数字巴别塔时,开源不是可选项,而是必选项" - -# 💡 认知发散:开源的可能是一种「群体智慧协议」 -## 从技术到文化的四层跃迁 - -| 层级 | 核心要素 | 现实映射案例 | -|--------------|--------------------------------------------------------------------------|---------------------------------------| -| **工具层** | Git/Markdown/CI/CD等技术工具 | GitHub工作流、Jupyter Notebook | -| **方法论层** | Pull Request机制/社区治理规则/许可证体系 | Apache投票制度、Linux维护者体系 | -| **生态层** | 多主体共生的可持续系统(开发者-企业-用户的正向循环) | Kubernetes生态、RISC-V指令集联盟 | -| **文明层** | 开放协作成为解决复杂系统的默认选项 | 人类基因组计划、维基百科 | - -### 3. 开源作为一种文化理念 - -开源作为一种文化理念 —— 从数学符号到数字文明的共享基因 - ---- - -## 🌌 文化演进史:开源理念的千年血脉 - -```mermaid -timeline - title 人类开源文化里程碑 - 公元前300年 : 欧几里得《几何原本》 - 830年 : 阿拉伯数字全球传播 - 1675年 : 莱布尼茨微积分符号 - 1958年 : IPTO建立ARPANET开放协议雏形 - 1998年 : 数字世界"开源"概念正式诞生 - 2020年 : WHO开放新冠基因组序列 -``` -# 人类开源文化里程碑 - -* **公元前300年**:欧几里得《几何原本》公开证明体系 - 欧几里得的《几何原本》是数学史上的一个里程碑,它公开了一套基于公理和定理的证明体系,为后来的数学研究奠定了基础。 - -* **830年**:阿拉伯数字通过《代数学》向全球开放传播 - 阿拉伯数学家阿尔-花剌子模的《代数学》将阿拉伯数字引入了欧洲,极大地推动了全球数学和科学的发展。 - -* **1675年**:莱布尼茨发布微积分符号系统(开源数学语言) - 莱布尼茨发布的微积分符号系统,为数学分析和科学计算提供了一种通用的语言,促进了现代科学的进步。 - -* **1958年**:IPTO建立ARPANET开放协议雏形 - 美国国防部高级研究计划局(IPTO)的联合研究项目建立了ARPANET,这是现代互联网的前身,开放的协议设计为网络的广泛传播和应用奠定了基础。 - -* **1998年**:“开源”概念正式诞生 - 数字世界"开源"概念在1998年正式诞生,标志着软件开发模式的一次重大变革,促进了全球软件开发的合作和创新。 - -* **2020年**:WHO开放新冠基因组序列 - 世界卫生组织(WHO)开放新冠基因组序列,加速了全球科学家对病毒的研究,推动了疫苗和治疗方法的快速开发。 - -## 🧮 数学:人类最早的开源实践 -### 数学的「开源特性」解剖 -+ 符号系统开源:阿拉伯数字、希腊字母全球通用 -+ 知识积累开放:定理证明可复现、可验证、可改进 -+ 协作网络去中心化:从亚历山大图书馆到arXiv预印本平台 - - -# 历史对照实验:闭源 vs 开源数学 - -| 案例 | 协作方式 | 成果影响 | -| -------- | -------- | ------------------------ | -| 牛顿微积分 | 闭源多年 | 引发与莱布尼茨的优先权之争 | -| 布尔代数 | 完全开源发布 | 催生整个计算机科学领域 | - -## 🌐 开源文化DNA:从数学到数字时代 - -**共享符号系统** - - 数学:∑积分符号 → 编程:{}代码块语法 - - 案例:LaTeX数学排版系统开源标准 - ---- - -## 🧪 互动实验:数学论文 vs 开源项目 - -### 对照分析表 -| 维度 | 数学论文系统 | 现有开源项目系统 | -|--------------|--------------------------|-------------------------| -| **最小协作单元** | 定理证明 | Pull Request | -| **版本管理** | 多版本手稿传递 | Git分支管理 | -| **质量检验** | 同行评审 | Code Review | -| **知识传承** | 学术谱系 | Contributor图谱 | -| **争议解决** | 学术辩论 | Issue讨论 | - ---- - -## 🔮 文化投射:开源理念的现代显化 - -### 跨领域开源范式 -| 领域 | 开源实践 | 数学渊源 | -|--------------|--------------------------|-------------------------| -| **区块链** | 以太坊智能合约开源 | 图灵可计算理论开放验证 | -| **生物技术** | CRISPR基因编辑协议共享 | DNA双螺旋结构开放研究 | -| **航天** | SpaceX公开火箭设计蓝图 | 开普勒行星定律开源传播 | - -### 开源文化主流的特性 -1. **可溯源性**:所有创新需标注知识谱系(如数学引用体系) -2. **可验证性**:过程数据完全开放(如Git历史记录) -3. **可扩展性**:允许衍生创造(如数学猜想迭代) - ---- - -## 💡 认知思考:我们是否终将开源 - -> "当罗马工匠将混凝土配方带入坟墓, -> 当大马士革钢工艺湮灭于战火, -> 人类文明的基因链就会出现断裂—— -> 直到《几何原本》被译成阿拉伯文, -> 直到Linux内核向全球开发者敞开, -> 我们才真正学会用开放对抗时间。" - -**通过混凝土的千年轮回,理解开源不是技术选择,而是文明存续的生存策略。** -**从泥板上的楔形数字到GitHub的星标仓库,人类始终在践行同一个真理:共享使知识永生。** diff --git a/docs/ch1/sec1/what-is-oss.md b/docs/ch1/sec1/what-is-oss.md new file mode 100644 index 0000000..820b0c1 --- /dev/null +++ b/docs/ch1/sec1/what-is-oss.md @@ -0,0 +1,360 @@ +## 什么是开源?(What) + +### 课程目标 + +1. 理解开源的多元定义(技术、模式、文化)。 +2. 通过真实案例感知开源的影响力。 +3. 激发参与开源的兴趣。 + +--- + +### 一、教学设计 + +1. **互动投票** + - **工具**:使用在线工具让学生投票选择日常使用的软件:Chrome、安卓手机、VS Code、Firefox等,揭晓答案均为开源或基于开源。 + - **扩展问题**:提问一些与开源相关的问题,比如“近年来最火热的开源软件有哪些?”或“你认为全球软件开发有多大比例依赖开源代码?”通过展示全球97%软件开发依赖开源代码等统计数据,给学生带来震撼。 +2. **沉浸式故事** + - **视频片段**:插入[Linux诞生纪录片](视频链接),通过真实故事让学生感知开源的力量,激发参与的兴趣。 + +--- + +### 二、开源的形式 + +#### 1. 开源作为一种软件类型(OSI定义) + +开源不仅仅是一个技术术语,它还承载了文化和模式的多重意义。开源软件的定义由**开放源代码促进会(OSI)**给出,是至今为止广泛认同的标准。OSI的定义将开源软件描述为: + +> **开源软件**是指其**源代码可被自由查阅、修改和分发**的软件,且必须满足以下所有条件—— + +#### 🔍 **官方定义:OSI的黄金标准** + +**开放源代码促进会(OSI)**提出的标准为我们提供了一个清晰的框架,帮助我们区分开源与闭源软件。开源软件的核心特点是:开放源代码,允许自由使用、修改、分发,且这种自由是无条件的。 + +--- + +#### 📜 **OSD核心条款(简化版)** + +**Open Source Definition(OSD)**核心条款可以精炼为四大原则,它们在实践中成为了开源软件的重要标志: + +| 核心原则 | 关键要求 | 反例警示⚠️ | +| ---------------------- | ------------------------------------------------------------------ | ---------------------- | +| **自由再分发** | 允许任意形式的分发(包括商业销售) | 禁止转售的软件 | +| **源代码公开** | 必须提供源代码,且禁止混淆或刻意设置编译障碍 | 只提供二进制文件的软件 | +| **允许衍生作品** | 允许修改源代码并发布修改后的版本(可附加合理限制) | 禁止二次开发的许可证 | +| **无歧视性限制** | 不得针对特定人群/领域/技术进行限制(如"不得用于军事用途"条款无效) | 限制用户职业的软件协议 | + +--- + +#### 核心概念 + +```diff ++ 开源软件 = 源代码开放 + 允许自由使用/修改/分发(OSI定义) +- 闭源软件 = "黑箱"操作 + 使用受限 +``` + +### 2. 早期的开源与闭源格局:分层解析 + +在软件发展史的不同阶段,开源与闭源呈现出不同的格局和特征。我们可以通过**基础设施层、操作系统层、应用层**这三个层次来全面解析开源与闭源的演变过程,并探索其中的文化与技术力量。 + +--- + +#### 🌍 **基础设施层:开放协议主导** + +**TCP/IP协议栈(1970s)** + +- **背景与作用**:由**美国国防部高级研究计划局(DARPA)**资助开发,**TCP/IP协议**成为互联网的通信基础。该协议栈的**完全开放性**让世界各地的机构得以自由实现并在全球范围内互联互通。 +- **关键意义**:这为互联网的快速扩展奠定了基础。TCP/IP协议成为全球网络连接的标准,极大推动了现代互联网的形成。 +- **典型案例**:**BSD UNIX(1980s)** 是开源实现TCP/IP协议栈的一个例子,BSD UNIX通过开源实现的TCP/IP协议栈成为了后来的**FreeBSD**和**NetBSD**等开源操作系统的基础。 + +**电子邮件系统** + +- **开放协议**:SMTP和POP3协议开放,成为全球邮件传输和接收的标准。尽管早期许多电子邮件系统都有闭源实现,但随着开源软件的发展,开源邮件系统逐渐占据主导地位。 +- **闭源案例**:如**Lotus Notes**(1989),其邮件系统在早期占据市场主导地位,但完全闭源,限制了用户的定制和扩展。 +- **开源先驱**:**Sendmail**(1983),开源邮件服务器软件,成为邮件服务器的事实标准,推动了邮件协议的普及。 + +--- + +#### 💻 **操作系统层:闭源商业软件的霸权** + +在操作系统层,闭源软件曾长时间占据主导地位,尤其是在个人电脑和大型主机领域,商业软件通过对源代码的控制,塑造了强大的市场格局。 + +| 系统 | 性质 | 关键事件 | +| ----------- | -------- | ------------------------------ | +| **UNIX** | 初期闭源 | AT&T禁止大学传播源码(1979) | +| **DOS/Windows** | 完全闭源 | 微软通过闭源绑定IBM PC(1981) | +| **VMS** | 闭源 | DEC专用系统,影响早期网络架构 | + +- **UNIX**:虽然最初的UNIX系统是由贝尔实验室(AT&T)开发的,但由于其巨大的技术潜力和影响力,AT&T在1979年开始限制其源代码的传播,开启了闭源软件的霸权时代。 +- **DOS/Windows**:微软通过完全封闭源代码,并将其绑定到IBM PC的硬件上,成功建立起了PC操作系统的市场主导地位。 +- **VMS**:DEC公司开发的VMS操作系统长期封闭,成为其自家硬件的专用系统,影响了早期的网络架构。 + +**例外突破**:尽管大多数操作系统都处于闭源状态,但**BSD UNIX(1977)**从AT&T UNIX衍生出开源分支,并为后来的FreeBSD/NetBSD/ OpenBSD等开源操作系统铺平了道路。 + +--- + +#### 🕸️ **应用层:开放与封闭的拉锯战** + +随着计算机和互联网的普及,应用层软件成为了开源与闭源之争的关键战场。在这个层面,开源和闭源的斗争更为激烈,影响也最为广泛。 + +**闭源主导领域** + +- **浏览器大战**:**Netscape**最初是闭源的(1994年),它曾是最受欢迎的浏览器。然而,由于开源运动的推动,Netscape决定在1998年开源其浏览器核心,最终催生了**Mozilla Firefox**这一开源浏览器的诞生,直接挑战了微软的**Internet Explorer**。 +- **办公软件**:**微软Office**(1989年)凭借其强大的功能和用户基础,长期占据办公软件市场的统治地位,且完全闭源,极大限制了用户的定制和扩展能力。 + +**开源亮点** + +- **Apache HTTP Server(1995)**:作为世界上最早的开源Web服务器,Apache HTTP Server迅速击败了当时闭源的**Netscape Enterprise Server**,成为全球最流行的Web服务器软件。 +- **Perl语言(1987)**:开源的Perl编程语言成为了早期Web开发的核心工具之一。它的开源特性使得开发者可以自由修改和扩展,迅速发展成开发人员的首选语言。 + +--- + +#### 🔄 **文化基因:开放协作的暗流** + +除了技术因素外,开源运动的成功还离不开其背后深厚的**文化基因**,它源于对**知识共享**和**协作创新**的深刻理解。 + +**RFC文化(始于1969)** + +- **开放标准的倡导者**:互联网工程任务组(IETF)通过**公开征求意见稿(RFC)**推动互联网协议的标准化。例如,**HTTP/1.0规范**在1996年以RFC 1945的形式发布,为全球的网络通信提供了共同语言。 + +**黑客伦理的影响** + +- **开源的文化传承**:MIT的**AI实验室**等机构提倡代码共享,早期的**ITS操作系统**就是一个典型的例子。其开放的代码理念,成为了日后现代开源运动的精神先驱。 +- **Richard Stallman与GNU计划**:1983年,**Richard Stallman**发布**GNU宣言**,并启动了GNU计划,致力于创建一个完全自由的操作系统。这标志着现代开源运动的觉醒,为后来的**Linux**内核等开源软件提供了理论支持和实践基础。 + +--- + +#### 📊 **关键转折点时间轴** + +| 年份 | 关键事件 | +| ---------- | --------------------------------------------- | +| **1969** | **ARPANET**诞生,开放协议成为互联网基础 | +| **1979** | AT&T开始收紧UNIX授权,闭源的商业化趋势显现 | +| **1983** | **GNU宣言**发布,标志着现代开源运动的觉醒 | +| **1985** | **FSF(自由软件基金会)**成立,**GPL协议**诞生 | +| **1991** | **Linux内核**首次发布,成为开源软件的代表 | +| **1995** | **Apache**超越闭源服务器,成为Web服务器的主流 | +| **1998** | "开源"一词正式诞生,开源成为技术和文化的代名词 | + +--- + +#### **总结与思考** + +**为什么基础设施层更早开放?** + +1. **军事科研需求**:在互联网的初期,**ARPANET**作为军事研究项目,需要实现跨机构的高效协作,因此选择开放协议,促进各方自由实现和参与。 +2. **商业价值滞后**:互联网初期缺乏明确的盈利模式,企业对软件的闭源保护意识较弱,反而开放协议和技术能够促进广泛的合作与发展。 +3. **学术共同体传统**:大学和研究机构历来推崇**知识共享**的传统,许多早期的技术发展,如**UNIX**和**TCP/IP协议**,都得到了学术界的广泛支持与推广。 + +**总结**:尽管随着商业化进程的推进,闭源软件在应用层逐渐占据主导地位,但从基础设施到应用层,开源的精神始终贯穿其中。开源和闭源之间的博弈,构成了现代数字技术生态中最为根本的对抗与合作。 + +### 3. 开源是一种协作与创新模式——从代码到文明的协作范式 + +#### 🛠️ 始于软件世界的协作革命:开源开发模式三阶跃迁 + +```mermaid +flowchart TD + A[软件类型] --> B{开发方式} + B --> C[代码开放] + C --> D[协作模式] + D --> E[创新范式] + E --> F[复杂系统协作] + F --> G[人类文明工程] +``` + +--- + +#### 软件层:开源开发的协作密码 + +开源的核心不仅仅是技术的共享,它深刻地改变了传统软件开发中的协作方式。不同的开源协作模式使得全球开发者能够共同工作,从**传统闭源开发**到**企业内部开源**,再到**完全开源**的广泛采用,开源逐渐形成了独特的协作密码。 + +**传统闭源开发** + +- **典型特征**: + - 代码仅限于内部团队访问,外部开发者无法获取源代码。 + - 严格的知识产权保护,源代码无法修改或分发。 +- **案例**:**Windows 95**的开发过程中,微软严格控制代码的所有权和访问权限,确保仅限内部开发人员修改和发布。 + +**企业内部开源(Inner Source)** + +- **核心逻辑**: + - 外部依旧保持闭源,但内部采用开源协作方式,跨团队共享代码库,允许内部贡献和修改。 +- **案例**: + - **微软**:通过"One Engineering System"实施内部开源,促进跨部门的协作与代码共享。 + - **沃尔玛**:采用内部开源模式开发电商平台,加速了门店系统的开发与迭代。 + +**完全开源** + +- **黄金标准**: + - 代码完全公开,任何人都可以参与修改和贡献,全球开发者共同推动项目进步。 + - **OSI定义**:符合开放源代码的标准,任何人可以自由使用、修改、分发。 +- **案例**: + - **Linux内核**:全球开发者贡献,成为最具影响力的开源操作系统之一。 + - **Vue.js**:前端框架,采用开源协作模式,社区驱动着其快速发展。 + +--- + +#### 💡 认知升级:协作模式的元规则 + +开源不仅是一种技术决策,它还是一种协作模式的变革。通过对不同协作模式的分析,我们可以理解,开源并非是唯一选择,而是在可持续性和普惠性之间寻求最佳平衡。 + +**不同模式的核心差异点** + +| 维度 | 传统闭源 | Inner Source | 完全开源 | +| -------- | -------- | ------------ | ---------- | +| **透明度** | 黑箱操作 | 组织内透明 | 全网公开 | +| **创新来源** | 内部研发 | 跨部门协同 | 全球智慧 | +| **进化速度** | 线性增长 | 多项式增长 | 指数级增长 | +| **案例代表** | Oracle | 微软 Azure | TensorFlow | + +--- + +#### 社会层:开源思维的跨界迁移 + +开源的影响力远不止局限于软件开发领域,它已经超越了技术,成为一种全球范围的协作范式。在不同的领域,开源思维和模式正被应用到各类复杂系统和社会工程中。 + +**超越代码:人类协作的元模式** + +开源不仅仅局限于数字世界,它在现实世界中也有广泛的应用场景。这些历史上的巨大协作工程和项目都能为我们提供开源模式的启示。 + +**现实世界中的「开源式协作」** + +- **古罗马引水渠建设**:多个城邦共享水利工程技术,技术改进方案被刻在公共石碑上,类似今天的**Git提交历史**。 +- **维基百科编辑**:全球用户可以编辑条目,类似于**Pull Request**的方式,且条目的讨论页记录了社区的争议解决过程,类似于**Code Review**。 + +--- + +#### 人类复杂工程协作史 + +```mermaid +timeline + title 协作模式进化史 + 公元前2560年 : 金字塔建造 + 1406年 : 紫禁城建设 + 1969年 : 阿波罗计划 + 1991年 : Linux内核开发(全球分布式协作) +``` + +**深度对比:金字塔 vs Linux内核** + +| 维度 | 古埃及金字塔建造 | Linux内核开发 | +| -------- | ---------------------- | ----------------------------------- | +| **协作规模** | 10万劳工+数百工程师 | 16000+贡献者 | +| **知识管理** | 象形文字记录在莎草纸上 | Git提交记录在GitHub | +| **质量控制** | 监工现场检查石块 | CI/CD自动化测试,社区反馈,人工审查 | +| **传承方式** | 师徒制手把手传授 | 代码审查+开发者文档 | +| **核心动力** | 法老的绝对权威 | 技术领导力+社区共识 | + +“当建造数字巴别塔时,开源不是可选项,而是必选项” + +--- + +#### 💡 认知发散:开源的可能是一种「群体智慧协议」 + +开源不仅仅改变了软件开发的方式,它还为全人类提供了一种更为高效、智能的协作模型。这种“群体智慧协议”不仅解决技术问题,也在解决人类文明的重大挑战。 + +--- + +### 4. 开源作为一种文化理念 + +开源不仅是一种技术实现,它也是一种全球范围内的文化理念,代表着共享、透明与协作的精神。从数字世界到整个社会的进步,开源成为了推动文明演化的重要力量。 + +#### 从技术到文化的四层跃迁 + +| 层级 | 核心要素 | 现实映射案例 | +| ------------------ | ---------------------------------------------------- | -------------------------------- | +| **工具层** | Git/Markdown/CI/CD等技术工具 | GitHub工作流、Jupyter Notebook | +| **方法论层** | Pull Request机制/社区治理规则/许可证体系 | Apache投票制度、Linux维护者体系 | +| **生态层** | 多主体共生的可持续系统(开发者-企业-用户的正向循环) | Kubernetes生态、RISC-V指令集联盟 | +| **文明层** | 开放协作成为解决复杂系统的默认选项 | 人类基因组计划、维基百科 | + +开源的概念从最初的代码共享,发展到如今的**开放协作**,并通过跨技术、跨行业、跨领域的应用,成为解决全球性问题的有效工具。这四个层级的跃迁反映了开源从技术实践到文化理念的深刻转变。 + +--- + +#### 🌌 文化演进史:开源理念的千年血脉 + +```mermaid +timeline + title 人类开源文化里程碑 + 公元前300年 : 欧几里得《几何原本》 + 830年 : 阿拉伯数字全球传播 + 1675年 : 莱布尼茨微积分符号 + 1958年 : IPTO建立ARPANET开放协议雏形 + 1998年 : 数字世界"开源"概念正式诞生 +``` + +#### 🧮 数学:人类最早的开源实践 + +数学作为人类最早的开源实践之一,通过符号系统的共享、定理的公开证明、知识的积累和去中心化协作,展现了开源的原始特征。 + +**数学的「开源特性」解剖** + +- 符号系统的开源:阿拉伯数字、希腊字母全球通用。 +- 知识积累的开放性:定理证明可复现、可验证、可改进。 +- 协作网络的去中心化:从亚历山大图书馆到现代的arXiv预印本平台,促进了全球知识共享。 + +--- + +#### 历史对照实验:闭源 vs 开源数学 + +| 案例 | 协作方式 | 成果影响 | +| ---------- | ------------ | -------------------------- | +| 牛顿微积分 | 闭源多年 | 引发与莱布尼茨的优先权之争 | +| 布尔代数 | 完全开源发布 | 催生整个计算机科学领域 | + +通过对比牛顿与莱布尼茨之间的优先权之争与布尔代数的开源发布,我们看到开源在推动学科发展的速度、广度和深度上的独特优势。 + +--- + +#### 🌐 开源文化DNA:从数学到数字时代 + +**共享符号系统** + +- 数学:∑积分符号 → 编程:{}代码块语法 +- 案例:LaTeX数学排版系统开源标准 + +--- + +#### 🧪 互动实验:数学论文 vs 开源项目 + +**对照分析表** + +| 维度 | 数学论文系统 | 现有开源项目系统 | +| ---------------------- | -------------- | ---------------- | +| **最小协作单元** | 定理证明 | Pull Request | +| **版本管理** | 多版本手稿传递 | Git分支管理 | +| **质量检验** | 同行评审 | Code Review | +| **知识传承** | 学术谱系 | Contributor图谱 | +| **争议解决** | 学术辩论 | Issue讨论 | + +--- + +#### 🔮 文化投射:开源理念的现代显化 + +**跨领域开源范式** + +| 领域 | 开源实践 | 数学渊源 | +| ------------------ | ---------------------- | ---------------------- | +| **区块链** | 以太坊智能合约开源 | 图灵可计算理论开放验证 | +| **生物技术** | CRISPR基因编辑协议共享 | DNA双螺旋结构开放研究 | +| **航天** | SpaceX公开火箭设计蓝图 | 开普勒行星定律开源传播 | + +**开源文化主流的特性** + +1. **可溯源性**:所有创新需标注知识谱系(如数学引用体系)。 +2. **可验证性**:过程数据完全开放(如Git历史记录)。 +3. **可扩展性**:允许衍生创造(如数学猜想迭代)。 + +--- + +#### 💡 认知思考:我们是否终将开源 + +> "当罗马工匠将混凝土配方带入坟墓, +> 当大马士革钢工艺湮灭于战火, +> 人类文明的基因链就会出现断裂—— +> 直到《几何原本》被译成阿拉伯文, +> 直到Linux内核向全球开发者敞开, +> 我们才真正学会用开放对抗时间。" + +**通过混凝土的千年轮回,理解开源不是技术选择,而是文明存续的生存策略。** +**从泥板上的楔形数字到GitHub的星标仓库,人类始终在践行同一个真理:共享使知识永生。** diff --git a/docs/ch5/index.md b/docs/ch1/sec2/history-of-oss.md similarity index 100% rename from docs/ch5/index.md rename to docs/ch1/sec2/history-of-oss.md diff --git a/docs/ch5/sec1/subsec1/git-introduction.md b/docs/ch1/sec3/why-oss.md similarity index 100% rename from docs/ch5/sec1/subsec1/git-introduction.md rename to docs/ch1/sec3/why-oss.md diff --git a/docs/ch5/sec2/git-basics.md b/docs/ch1/sec4/how-to-oss.md similarity index 100% rename from docs/ch5/sec2/git-basics.md rename to docs/ch1/sec4/how-to-oss.md diff --git a/docs/ch2/index.md b/docs/ch2/index.md index b558579..8b13789 100644 --- a/docs/ch2/index.md +++ b/docs/ch2/index.md @@ -1,28 +1 @@ -# S2: 拥抱开源阶段 - **目标** :开始使用开源软件,初步了解开源项目的协作模式。 - -## 一、开源协作模式 - -1. **如何贡献** :详细讲解 Issue、Pull Request、Code Review 等操作在开源项目协作中的关键作用与具体流程,助力参与者明确自身在开源项目中的发力点。 -2. **工具与平台** :介绍如 Github、Gitlab 等主流开源项目托管平台的功能特性、使用优势,方便开发者高效管理开源项目。 -3. **开源项目工作流** :全面梳理从发现 Issue 问题,到提交 Pull Request 解决问题,再到 Code Review 审核完善的一整套完整流程,让参与者对开源协作有清晰的认知框架。 - -## 二、开源软件的替代方案 - -**举例** :列举日常生活与工作场景中,可用开源软件替换闭源软件的典型案例,如以 Linux 系统替换 Windows 系统,用 LibreOffice 替代 Microsoft Office,拿 GIMP 取代 Photoshop,使 VLC 成为商业播放器的替代之选,展现开源软件的实用性。 - -**选择适合的发行版** : - -* **桌面发行版** :推荐适合桌面端使用的 Ubuntu、Deepin、OpenEuler 等发行版,阐述其各自的界面风格、功能特性、适配场景,帮助用户精准选型。 -* **服务器发行版** :介绍 CentOS Stream、Alpine 等常用于服务器领域的发行版优势,如稳定性、资源占用、运维便利性等,指导用户按需抉择。 - -## 三、活动组织 - -1. **了解和参与开源社区活动** :列举如 Linux 101、OpenEuler 社区活动等具有代表性的开源社区活动,阐述参与其中可获得的知识增长、人脉拓展、技术交流等诸多益处。 -2. **通过参与活动了解更多开源工具和资源** :强调借助社区活动这一平台,挖掘更多实用的开源工具、优质资源,拓宽技术视野。 - -## 四、参考任务 - -1. 找到一个可以替换闭源工具的开源软件,并将其应用到日常工作中。 -2. 记录切换开源软件的过程、问题和解决方案,撰写一篇博客分享。 diff --git a/docs/ch2/sec1/terminology.md b/docs/ch2/sec1/terminology.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/docs/ch2/sec1/terminology.md @@ -0,0 +1 @@ + diff --git a/docs/ch5/sec3/git-advanced.md b/docs/ch2/sec2/culture.md similarity index 100% rename from docs/ch5/sec3/git-advanced.md rename to docs/ch2/sec2/culture.md diff --git a/docs/ch5/sec4/git-projects.md b/docs/ch2/sec3/rules.md similarity index 100% rename from docs/ch5/sec4/git-projects.md rename to docs/ch2/sec3/rules.md diff --git a/docs/ch3/index.md b/docs/ch3/index.md index 77c4c3e..8b13789 100644 --- a/docs/ch3/index.md +++ b/docs/ch3/index.md @@ -1,56 +1 @@ -# S3: 贡献开源阶段 - **目标** :学习开源基础技能并通过代码或文档的贡献实践开源。 - -## 一、开源基础技能 - -### **Git 学习** : - -* **Git 的基本操作** :系统讲解 clone、commit、push、pull、merge 等基础操作的命令、用途与使用场景,帮助初学者快速上手。 -* **Git 的原理** :深入剖析分支、HEAD 指针、合并冲突等核心概念,助力开发者理解 Git 底层运行逻辑,更好应对复杂情况。 -* **进阶技能** :介绍使用 Git 提交签名、提交模板的方法与优势,提升代码提交的规范性与可追溯性。 - -### **代码托管平台** : - -* **Github、Gitlab、Gitee 等的使用技巧** :分享各大主流代码托管平台的特色功能、高效使用诀窍,如项目搜索、个性化设置等,满足不同开发者需求。 -* **项目管理功能** :详细阐释 Issue、Milestone、Wiki 等功能在开源项目管理中的运用,助力团队协作与项目推进。 - -### **如何写好一个 commit message** : - -* **Linux Kernel Patch** :解析 Linux Kernel 项目中 commit message 的规范与范例,学习行业标杆经验。 -* **Conventional Commits** :介绍通用的 Conventional Commits 规范,掌握一种广泛适用的提交信息编写格式。 -* **RustSBI 项目的 commit message 规范** :以 RustSBI 项目为例,了解特定项目的个性化要求,拓宽规范认知广度。 - -### **文档撰写** - -讲解开源项目中文档撰写的重要性、基本规范(如格式、语言风格)、常用工具(如 Markdown 编辑器),培养撰写高质量文档的能力。 - -## 二、计算机基础知识 - -### **The Missing Semester of Your CS Education** - -推荐学习这一经典课程资源,填补计算机科学知识体系漏洞,夯实基础。 - -### **不同方向的简单介绍与开源项目** : - -* **系统开发** :介绍 Linux Kernel、QEMU 等开源项目,阐述系统开发领域的关键技术、应用场景,帮助开发者找准兴趣点。 -* **Web 开发** :讲解 React、Vue 等热门 Web 开发框架对应的开源项目,分析其优势、适用范围,开启 Web 开发探索之门。 -* **网络** :剖析 WireGuard、Cilium 等网络相关开源项目,揭示网络领域前沿技术与创新应用。 -* **数据分析** :介绍 Pandas、Jupyter 等数据分析利器背后的开源项目,了解数据分析流程与实践要点。 -* **人工智能** :解读 TensorFlow、PyTorch 等人工智能框架所属的开源项目,洞察人工智能发展趋势。 -* **找到适合自己的方向并选择活跃的开源项目** :引导开发者依据自身兴趣、技能专长,在众多方向中筛选合适的开源项目深入参与。 - -## 三、表达与交流的重要性 - -1. **如何清晰表达问题和想法** :传授有效沟通技巧,如组织语言逻辑、突出重点,确保在开源协作中准确传达信息。 -2. **如何有效进行跨文化交流** :鉴于开源社区的全球化特性,分享跨文化交流注意事项,如尊重文化差异、避免误解,促进国际合作顺畅。 - -## 四、学会如何提问 - -1. **如何查找资料** :教导善用 Google 和 Stack Overflow 等搜索引擎与技术问答平台,快速定位所需知识,自主解决常见问题。 -2. **提问的基本规范** :强调明确描述问题、给出复现步骤的重要性,提高问题被解答的效率,维护良好社区氛围。 - -## 五、参考任务 - -1. 学习使用 Git,完成一次 Fork 并提交 PR 的流程。 -2. 选择一个开源项目,通过贡献文档或代码提交一个 PR。 diff --git a/docs/ch3/sec1/index.md b/docs/ch3/sec1/index.md new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/docs/ch3/sec1/index.md @@ -0,0 +1 @@ + diff --git a/docs/ch3/sec1/subsec1/1-git-introduction.md b/docs/ch3/sec1/subsec1/1-git-introduction.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/ch5/sec1/subsec2/code-hosting-platforms.md b/docs/ch3/sec1/subsec1/2-code-hosting-platforms.md similarity index 81% rename from docs/ch5/sec1/subsec2/code-hosting-platforms.md rename to docs/ch3/sec1/subsec1/2-code-hosting-platforms.md index de84988..81af09f 100644 --- a/docs/ch5/sec1/subsec2/code-hosting-platforms.md +++ b/docs/ch3/sec1/subsec1/2-code-hosting-platforms.md @@ -9,6 +9,7 @@ 代码托管平台是一种基于云服务的开发协作工具,主要用于存储、管理和协同开发代码项目。它通过集成版本控制系统(如 Git)、协作工具和自动化流程,为开发者提供全生命周期的代码管理支持,是现代软件开发和开源生态的核心基础设施。 ???+ node "类比理解--就像游戏云存档" + 代码托管平台就像游戏的**云存档**功能。想象一下,你在玩游戏时,可以把游戏进度保存在本地(本地存档),但如果电脑坏了或者存档丢了,你的努力就白费了。而代码托管平台就像游戏的**云存档**,它把你的代码上传到云端服务器,即使你的电脑坏了,代码也不会丢失,随时可以从云端恢复。 在游戏中,你可以创建多个**存档点**,比如在打Boss之前存个档,如果失败了可以重新读档。代码托管平台也有类似的功能,叫做**版本控制**。每次你修改代码,都可以创建一个“存档点”(提交记录)。如果改错了,可以轻松回到之前的版本,就像读档一样。 @@ -48,66 +49,67 @@ ### 其他常见术语 ???+ tip "小提示" + 这些内容在本课程后续会有更详细的讲解,目前只需要熟悉基本概念即可。其实,你可以把代码托管平台类比为微博、虎扑、贴吧、小红书或 Steam 这样的平台,只不过上面分享和讨论的内容是代码。其中很多概念都是相通的。 -#### 1. **复制仓库(Fork)** +#### 1. **复制仓库(Fork)** -- **是什么**:将别人的仓库复制到自己的账户下,就像你在微博上“转发”一条动态到自己的主页一样。 -- **为什么重要**:让你可以自由修改代码,就像你可以在转发的内容上加自己的评论或修改。同时,你还可以将改进贡献回原项目。 +- **是什么**:将别人的仓库复制到自己的账户下,就像你在微博上“转发”一条动态到自己的主页一样。 +- **为什么重要**:让你可以自由修改代码,就像你可以在转发的内容上加自己的评论或修改。同时,你还可以将改进贡献回原项目。 - **使用场景**:参与开源项目、实验性修改,就像你看到一篇有趣的文章,想自己试试修改后再分享给别人。 --- #### 2. **点赞/收藏(Star)** -- **是什么**:对仓库点赞,表示支持或收藏,就像你在小红书或微博上给喜欢的帖子点个赞或收藏起来。 -- **为什么重要**:方便你快速找到喜欢的项目,同时也是对开发者的鼓励,就像你收藏了一篇好文章,以后可以随时翻出来看。 +- **是什么**:对仓库点赞,表示支持或收藏,就像你在小红书或微博上给喜欢的帖子点个赞或收藏起来。 +- **为什么重要**:方便你快速找到喜欢的项目,同时也是对开发者的鼓励,就像你收藏了一篇好文章,以后可以随时翻出来看。 - **使用场景**:收藏优质项目、支持开发者,比如你看到一个很棒的工具库,点个 Star 表示支持。 --- -#### 3. **关注仓库(Watch)** +#### 3. **关注仓库(Watch)** -- **是什么**:关注仓库,接收更新通知,就像你在虎扑或贴吧上关注一个话题,每次有新回复都会提醒你。 -- **为什么重要**:让你随时了解项目的动态,比如新功能发布或 Bug 修复,就像你关注的博主发了新内容,你会第一时间知道。 +- **是什么**:关注仓库,接收更新通知,就像你在虎扑或贴吧上关注一个话题,每次有新回复都会提醒你。 +- **为什么重要**:让你随时了解项目的动态,比如新功能发布或 Bug 修复,就像你关注的博主发了新内容,你会第一时间知道。 - **使用场景**:跟踪感兴趣的项目、参与社区讨论,比如你关注了一个开源项目,想随时了解它的进展。 --- -#### 4. **问题跟踪(Issues)** +#### 4. **问题跟踪(Issues)** -- **是什么**:用于报告 Bug、提出新功能或讨论任务,就像你在 Steam 社区或贴吧里发帖提问或反馈问题。 -- **为什么重要**:是项目管理和协作的核心工具,帮助开发者沟通和解决问题,就像你在论坛上发帖后,其他人可以回复并提供解决方案。 +- **是什么**:用于报告 Bug、提出新功能或讨论任务,就像你在 Steam 社区或贴吧里发帖提问或反馈问题。 +- **为什么重要**:是项目管理和协作的核心工具,帮助开发者沟通和解决问题,就像你在论坛上发帖后,其他人可以回复并提供解决方案。 - **使用场景**:报告问题、提出改进建议、讨论技术细节,比如你发现了一个 Bug,可以在 Issues 里提出来。 --- #### 5. **代码合并请求(Pull Request/Merge Request)** -- **是什么**:请求将你的代码修改合并到原项目,就像你在贴吧或论坛上写了一篇长文,希望版主把它加进精华帖里。 -- **为什么重要**:是开源贡献的核心方式,让开发者可以协作改进代码,就像你写了一篇好文章,希望更多人看到并认可。 +- **是什么**:请求将你的代码修改合并到原项目,就像你在贴吧或论坛上写了一篇长文,希望版主把它加进精华帖里。 +- **为什么重要**:是开源贡献的核心方式,让开发者可以协作改进代码,就像你写了一篇好文章,希望更多人看到并认可。 - **使用场景**:提交代码改进、修复 Bug、添加新功能,比如你修复了一个问题,可以提交 Pull Request 让原作者合并你的修改。 --- -#### 6. **自动化工作流(CI/CD)** +#### 6. **自动化工作流(CI/CD)** -- **是什么**:自动化测试、构建和部署的工具,就像你在 Steam 上设置了自动更新游戏,每次有新版本都会自动下载安装。 -- **为什么重要**:提升开发效率,确保代码质量,就像你设置了自动回复,不用每次手动处理重复的事情。 +- **是什么**:自动化测试、构建和部署的工具,就像你在 Steam 上设置了自动更新游戏,每次有新版本都会自动下载安装。 +- **为什么重要**:提升开发效率,确保代码质量,就像你设置了自动回复,不用每次手动处理重复的事情。 - **使用场景**:自动化测试、持续集成/持续交付,比如每次提交代码后,自动运行测试并发布新版本。 --- ## 常用代码托管平台 -| **平台** | **核心特点** | **适用场景** | -|----------------|------------------------------------------------------------------------------|----------------------------------| -| **GitHub** | 全球最大开源社区,功能全面,CI/CD(GitHub Actions),私有仓库有限 | 开源项目、个人开发者、企业项目 | -| **GitLab** | 一体化 DevOps,内置 CI/CD,支持私有部署,免费版功能强大 | 企业级 DevOps、私有部署 | -| **Gitee** | 国内访问快,中文支持好,适合国内开发者,CI/CD 国内优化 | 国内开发者、企业项目、开源项目 | -| **AtomGit** | 新兴平台,简洁易用,国内访问较快 | 个人开发者、小型团队 | -| **Bitbucket** | 与 Atlassian 工具集成(Jira、Trello),CI/CD(Pipelines),私有仓库有限 | 企业团队、Atlassian 工具用户 | -| **GitLink** | CCF 官方支持,专注科研开源生态,符合国内合规标准,支持项目孵化与学术协作 | 学术研究、国内开源项目、教育领域 | +| **平台** | **核心特点** | **适用场景** | +| ------------------- | ------------------------------------------------------------------------ | -------------------------------- | +| **GitHub** | 全球最大开源社区,功能全面,CI/CD(GitHub Actions),私有仓库有限 | 开源项目、个人开发者、企业项目 | +| **GitLab** | 一体化 DevOps,内置 CI/CD,支持私有部署,免费版功能强大 | 企业级 DevOps、私有部署 | +| **Gitee** | 国内访问快,中文支持好,适合国内开发者,CI/CD 国内优化 | 国内开发者、企业项目、开源项目 | +| **AtomGit** | 新兴平台,简洁易用,国内访问较快 | 个人开发者、小型团队 | +| **Bitbucket** | 与 Atlassian 工具集成(Jira、Trello),CI/CD(Pipelines),私有仓库有限 | 企业团队、Atlassian 工具用户 | +| **GitLink** | CCF 官方支持,专注科研开源生态,符合国内合规标准,支持项目孵化与学术协作 | 学术研究、国内开源项目、教育领域 | **一句话总结**: diff --git a/docs/ch3/sec1/subsec1/3-practice-code-hosting-platforms.md b/docs/ch3/sec1/subsec1/3-practice-code-hosting-platforms.md new file mode 100644 index 0000000..34b643f --- /dev/null +++ b/docs/ch3/sec1/subsec1/3-practice-code-hosting-platforms.md @@ -0,0 +1,58 @@ +# 实践:注册并熟悉代码托管平台 (易炜涵) + +> 学生注册代码托管平台账户并熟悉其功能。注册 GitHub、Gitee 等平台的账号。了解平台的主要功能界面,并做出一些常识。 + +## 具体步骤 + +### 1. 注册账号 + +1. **访问平台网站**: + - GitHub: [https://github.com](https://github.com) + - Gitee: [https://gitee.com](https://gitee.com) +2. **创建账户**: + - 点击“Sign up”或“注册”按钮,按照提示填写信息完成注册。 + +??? tip "注册之后可以做的事" + + 完成 GitHub 注册后,可以做这些事: + + 1. **安全**:启用两步验证(2FA),绑定备用邮箱,生成 SSH 密钥; + 2. **个人品牌**:设置简短易记的 ID、自己喜欢头像、技术向简介(Bio); + 3. **主页优化**:创建同名仓库写 Profile README(技术栈/项目展示),Pin 6个优质仓库; + 4. **学生福利**:认证 GitHub Student Pack 免费解锁 Pro 功能; + 意义:提升账户安全,建立专业形象,增加曝光机会,融入开发者社区,为求职或协作积累信用资产。 + +### 2. 熟悉 github 平台功能 + +#### Dashboard 页面 + +注册之后登录首先看到的应该是你的 Dashboard 界面,就像下图这样,不过你的可能比较空白(😁) + +![Dashboard](../../../assets/Dashborad.png) + +图 1. Dashboard +{: .caption } + +???+ node "Dashboard的介绍" + + GitHub Dashboard 是用户登录后的主工作界面,集中显示关注仓库的动态更新、推荐项目、待处理通知(Issues/PR)、近期代码提交记录,以及个人仓库列表和团队动态,支持快速跳转到代码审查、仓库管理等功能模块。 + +#### repository 页面 + +注册之后就可以做一些操作了,比如说收藏一个仓库,就是给这个仓库一颗⭐️,可以点击[这里](https://github.com/hust-open-atom-club/intro2oss)去送出你的第一颗⭐️ + +![repository](../../../assets/repo.png) + +图 2. Repository +{: .caption } + +???+ node "repository的介绍" + + 在 GitHub 仓库页面中,您会看到代码文件列表、README 文件、顶部导航栏(包括 Issues、Pull Requests、Actions、Projects、Wiki)、右侧功能栏(About、Releases、Packages、Contributors),以及 Issue 页面的左侧栏(Assignees、Labels、Projects、Milestone、Development)。此外,还有 Star、Fork、Watch、Code 等功能。建议从 README 文件开始,逐步熟悉 Issues 和 Pull Requests 等协作功能。 + +## 总结 + +!!! summary "学习目标" + - 掌握代码托管平台(如 GitHub、Gitee)的注册与基本操作流程 + - 熟悉 GitHub 的核心功能界面,包括 Dashboard、Repository + - 尝试使用 Star、Fork、Watch 等功能参与开源项目 diff --git a/docs/ch3/sec1/subsec1/4-create-repo.md b/docs/ch3/sec1/subsec1/4-create-repo.md new file mode 100644 index 0000000..bf00697 --- /dev/null +++ b/docs/ch3/sec1/subsec1/4-create-repo.md @@ -0,0 +1,142 @@ +# 创建并管理仓库 (Repository) (易炜涵) + +> 本实验旨在帮助学生掌握如何创建并管理云端代码仓库,并建立本地与云端仓库的同步连接。我们将通过两种不同的途径实现这一目标:一种是从 GitHub 网站开始操作,另一种是从本地计算机开始操作。 + +--- + +### 远程和本地 + +在开发和协作过程中,**远程**和**本地**是两个非常重要的概念: + +- **本地**:指的是你当前使用的计算机环境,包括本地文件、开发工具和配置。例如,你在本地编写的代码、运行的测试、以及使用的 Git 仓库都属于“本地”的范畴。 +- **远程**:指的是位于网络服务器上的资源和服务。例如,GitHub、Gitee 等代码托管平台上的仓库,或者云服务器上的应用程序和数据。 + +理解这两个概念的区别和联系非常重要: +- **本地**是你个人工作的起点,所有代码和修改最初都是在本地完成的。 +- **远程**是团队协作和共享的基础,通过将本地的更改推送到远程,你可以与他人共享代码、协同开发,并确保代码的安全备份。 + +在 Git 中,**本地**通常指你的本地仓库,而**远程**指远程仓库(如 GitHub)。你需要通过 `git push` 将本地的更改同步到远程,或通过 `git pull` 将远程的更新拉取到本地。这种“本地-远程”协作模式是现代开发的核心实践之一。 + +随着学习的深入,你会逐渐意识到“本地”和“远程”的更多应用场景,例如: + +- 本地开发环境 vs 远程部署环境 +- 本地数据库 vs 远程数据库 +- 本地测试 vs 远程持续集成(CI) + +掌握这种思维方式,将帮助你更好地理解开源的工作流程。 + +--- + +## 从 GitHub 网站开始 + +- **创建远程仓库**:登录 GitHub 并点击“New repository”按钮。填写仓库名称、描述并选择公开或私有。点击“Create repository”完成创建。 + +![Create-repo](../../../assets/createrepo.png) + +- **克隆仓库到本地**:复制新仓库的克隆 URL。在终端中使用以下命令将仓库克隆到本地: + +```bash +$ git clone https://github.com/ywh555hhh/MyFirstRepo.git #这就是你要输入的命令,你要输入的网址和这个会不一样 +Cloning into 'MyFirstRepo'... +remote: Enumerating objects: 4, done. +remote: Counting objects: 100% (4/4), done. +remote: Compressing objects: 100% (4/4), done. +remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) +Receiving objects: 100% (4/4), 4.79 KiB | 4.79 MiB/s, done. +``` + +- **进行更改并提交**:在本地仓库中进行一些更改,例如添加新文件或修改现有文件。 + +使用以下命令提交更改: + + + +```bash +git add . +git commit -m "Your commit message" +``` + +- **推送更改**:使用以下命令将更改推送到远程仓库: + +```bash +git push origin main +``` + +--- + +## 从本地开始 + +### 初始化本地仓库 + +- 打开终端或命令行工具(Windows 用户可以使用 Git Bash,macOS 和 Linux 用户可以使用 Terminal)。 + +- 使用 `cd` 命令导航到你希望创建仓库的文件夹: + +```bash +cd /path/to/your/project-folder +``` + +- 使用 `git init` 初始化一个新的 Git 仓库,这会创建一个隐藏的 `.git` 文件夹,Git 就能在这个文件夹中管理你的项目版本了: + +```bash +git init +``` + +- **意义**:这一步告诉 Git 你要开始在这个文件夹中跟踪文件的更改,形成版本控制。 + +### 创建初始文件 + +- 在项目文件夹中,创建一些初始文件,例如 `README.md`(用于项目描述)和 `.gitignore`(用于忽略不需要版本控制的文件,如临时文件、日志文件等)。 +- 使用文本编辑器打开这些文件并添加内容。比如在 `README.md` 中写一些项目的基本信息。 +- 使用以下命令将这些文件添加到 Git 的暂存区: + +```bash +git add . +``` + +**解释**: `git add .` 会将当前文件夹中的所有更改文件(包括新建的文件)添加到暂存区,准备提交。 + +- 使用 `git commit` 命令提交这些文件,`-m` 后面跟着的是提交说明: + +```bash +git commit -m "Initial commit" +``` + +- **意义**:提交记录了你对文件的更改,并为后续的版本控制奠定基础。提交信息 `"Initial commit"` 是用来描述这次提交的内容。 + +### 连接到远程仓库 + +- 打开 GitHub 或其他 Git 托管服务,创建一个新的空仓库。无需勾选“Initialize this repository with a README”选项,因为我们已经在本地创建了一个 `README.md` 文件。 +- 复制新仓库的远程 URL,通常会是 `https://github.com/yourusername/yourrepository.git`。 +- 在本地仓库中使用以下命令将本地仓库与远程仓库关联: + +```bash +git remote add origin https://github.com/yourusername/yourrepository.git +``` + +- **意义**:这一步把本地仓库和远程仓库连接起来,告诉 Git 在远程仓库中保存你的代码。 + +### 推送更改到远程仓库 + +- 使用 `git push` 命令将本地的提交推送到远程仓库。首次推送时需要加上 `-u` 参数,表示设置远程仓库为默认的推送目标: + +```bash +git push -u origin main +``` + +- **意义**:`git push` 是将本地的提交上传到远程仓库,`main` 是你本地分支的名字。如果是第一次推送,它会将本地的 `main` 分支推送到远程仓库。 + +--- + +## 私人仓库和公共仓库 + +当前内容主要关注如何创建和管理**私人仓库**,即仅你自己或指定的合作者可以访问的仓库。这种类型的仓库适合用于存放个人项目、学习代码或敏感数据。 + +如果你计划创建和管理**公共仓库**(即所有人都可以访问的仓库),需要注意以下几点: + +1. **许可证选择**:公共仓库通常需要明确项目的开源许可证(如 MIT、GPL 等),以便告知他人如何使用你的代码。 +2. **文档完善**:在公共仓库中,良好的文档是关键,包括 `README.md` 详细描述项目、`CONTRIBUTING.md` 说明贡献流程。 +3. **代码规范**:保持清晰的代码结构和风格,方便其他开发者理解和参与项目。 +4. **安全检查**:确保提交到公共仓库的代码中没有敏感信息(如 API 密钥、配置文件等),以免造成不必要的风险。 + +如果你有兴趣进一步了解公共仓库的管理,可以专门针对这些注意事项进行深入学习! diff --git a/docs/ch3/sec1/contributing-to-rustsbi.md b/docs/ch3/sec1/subsec2/6-commit-message.md similarity index 78% rename from docs/ch3/sec1/contributing-to-rustsbi.md rename to docs/ch3/sec1/subsec2/6-commit-message.md index fd298b4..b74e12e 100644 --- a/docs/ch3/sec1/contributing-to-rustsbi.md +++ b/docs/ch3/sec1/subsec2/6-commit-message.md @@ -1,6 +1,6 @@ # 为 RustSBI 贡献 ------------------------------------------- +--- ## 行为准则 @@ -10,7 +10,7 @@ 一个优秀的*提交*应该只解决一个问题,使得功能完整,即便只有一行代码也可以提交。而一个优秀的*提交信息*是项目的标杆,这是未来其他贡献者给项目贡献的规范。他们会按照你的*提交信息*去编写他们的贡献,从标题的格式到内容的详细程度。所以如何写好一个*提交信息*就显得十分重要。不仅要遵循项目的风格指南,确保*提交信息*的一致;还要使得*提交信息*的标题清晰简洁,能够准确反映变更的内容。 -需要注意的是,RustSBI 社区采用**全英文**编写的*提交信息*。同时,`rustsbi/rustsbi`若干个模块都具有自己的更改日志文件,我们使用*提交信息*来生成 `CHANGELOG.md` 文档。我们通过*集成测试*检查对本模块文件夹下的任何文件的修改,**必须一并为对应的`CHANGELOG.md`增加 CHANGELOG 条目**。否则检查不通过,可能会导致您的更改无法出现在下一个版本的更新日志中。 +需要注意的是,RustSBI 社区采用**全英文**编写的*提交信息*。同时, `rustsbi/rustsbi` 若干个模块都具有自己的更改日志文件,我们使用*提交信息*来生成 `CHANGELOG.md` 文档。我们通过*集成测试*检查对本模块文件夹下的任何文件的修改,**必须一并为对应的 `CHANGELOG.md` 增加 CHANGELOG 条目**。否则检查不通过,可能会导致您的更改无法出现在下一个版本的更新日志中。 其次,每个*提交*都需要签名,每次*拉取请求*或*推送*都由*集成测试*检查更新的*提交*是否具有 `Signed-off-by` 标记。 @@ -35,30 +35,31 @@ ``` > 为了更好的可读性,提交信息每行都不应该超过 100 个字符! + #### 标题 -作为提交信息的第一行,`<标题>`有着严格的格式要求,通常为: +作为提交信息的第一行, `<标题>` 有着严格的格式要求,通常为: ``` : ``` -如果你已习惯了**约定式提交**也可以同时使用`<类型>`和`<范围>`: +如果你已习惯了**约定式提交**也可以同时使用 `<类型>` 和 `<范围>` : ``` (): ``` -> `<范围 或 类型>/<类型>(范围)`后面有一个 `!` ,或在`<脚注>`中包含 `BREAKING CHANGE:` ,提醒注意**破坏性变更**。破坏性变更可以是任意`<类型>`提交的一部分。 +> `<范围 或 类型>/<类型>(范围)` 后面有一个  `!`  ,或在 `<脚注>` 中包含  `BREAKING CHANGE:`  ,提醒注意**破坏性变更**。破坏性变更可以是任意 `<类型>` 提交的一部分。 #### 范围 -`<范围>`是所主要更改的子模块名称,多个子模块和具有重名的子模块的更改可以取上层模块名称作为`<标题>`的前缀。`<范围>`的使用适合于一个提交中涵盖了多个`<类型>`或不适合用`<类型>`来界定的场景。 +`<范围>` 是所主要更改的子模块名称,多个子模块和具有重名的子模块的更改可以取上层模块名称作为 `<标题>` 的前缀。 `<范围>` 的使用适合于一个提交中涵盖了多个 `<类型>` 或不适合用 `<类型>` 来界定的场景。 示例: - **`rt`**: `sbi-rt/src/legacy.rs` 更改 ([cfbb772](https://github.com/rustsbi/rustsbi/commit/cfbb7724d0b1a9ab37d2d18177db778aef5f04a3)) -- **`spec`**: `sbi-spec/CHANGELOG.md`和`sbi-spec/Cargo.toml` 更改 ([0837da8](https://github.com/rustsbi/rustsbi/commit/0837da8fc325fca23c5ac7423f087e1d4d54783e)) +- **`spec`**: `sbi-spec/CHANGELOG.md`和 `sbi-spec/Cargo.toml` 更改 ([0837da8](https://github.com/rustsbi/rustsbi/commit/0837da8fc325fca23c5ac7423f087e1d4d54783e)) - **`binary`**: `sbi-spec/src/binary.rs` 文件更改 ([f87e9fc](https://github.com/rustsbi/rustsbi/commit/f87e9fc2cdb5575d49146fd3b5b25dc0d279236c)) - **`lib`**: `src/cppc.rs`、`src/hsm.rs`、`src/rfence.rs` 文件更改 ([c7ce73b](https://github.com/rustsbi/rustsbi/commit/c7ce73bb84eef7cf3aa1683b1d15094eb081ed73)) - **`tests`**: `tests/build-full.rs`、`tests/build-rename.rs`、`tests/build-skip.rs` 文件更改 ([2753980](https://github.com/rustsbi/rustsbi/commit/2753980672348c745ac84a074695b96363d22d71)) @@ -68,7 +69,7 @@ #### 类型 -作为对`<范围>`的补充,遵循**约定式提交**,必须为下列之一,同时附上示例: +作为对 `<范围>` 的补充,遵循**约定式提交**,必须为下列之一,同时附上示例: - **`feat`**: 新增了一个功能 ([5baa946](https://github.com/rustsbi/rustsbi/commit/5baa946c4036bccba760be36c049ad1626b8d5e0)) - **`fix`**: 修复了一个 bug ([293db69](https://github.com/rustsbi/rustsbi/commit/293db697b39daf69eae1315cb85996e134d0d0b7)) @@ -89,11 +90,11 @@ #### 正文 -在`<标题>`与`<正文>`之间隔一个空行,即保持第二行为空,正文另起一行。这里可以对你的变更说明进行详细的展开了,希望上面整理思路的方式可以帮到你。记得和`<主题>`同样使用命令式的现在时态:"change" 而不是 "changed" 或 "changes"。 +在 `<标题>` 与 `<正文>` 之间隔一个空行,即保持第二行为空,正文另起一行。这里可以对你的变更说明进行详细的展开了,希望上面整理思路的方式可以帮到你。记得和 `<主题>` 同样使用命令式的现在时态:"change" 而不是 "changed" 或 "changes"。 #### 脚注 -`<脚注>`与之前的`<正文>`也要隔一个空行。`<脚注>`部分包含签名和与该提交相关的其他引用: +`<脚注>` 与之前的 `<正文>` 也要隔一个空行。 `<脚注>` 部分包含签名和与该提交相关的其他引用: - **`Signed-off-by:`** `git commit` 命令中通过 `-s` 参数指定。 - **`Fix:`** 如果该提交修复了一个开放问题,在日志末尾添加对该问题的引用。 @@ -102,7 +103,7 @@ - 示例:`Refs: https://github.com/riscv-non-isa/riscv-sbi-doc/releases/download/vv3.0-rc1/riscv-sbi.pdf` ([fbbab51](https://github.com/rustsbi/rustsbi/commit/fbbab51bd9fdf6ca9b459f19714c8fd9a75240cc)) - **`BREAKING CHANGE:`** 表示引入了破坏性变更,可能无法兼容依赖于原有功能的代码。这些变更要求社区用户在更新到包含此提交的版本后修改他们的代码。引入破坏性变更的同时进行如下操作: - **文档更新:** 更新相关文档,明确说明变更内容、影响以及可能的迁移步骤。 - - **版本升级:** 发布一个新版本时,在发布说明中清晰地标明`BREAKING CHANGE`。 + - **版本升级:** 发布一个新版本时,在发布说明中清晰地标明 `BREAKING CHANGE`。 - **通知:** 向用户、开发者或团队成员提供足够的通知,提前告知即将发生的变更,以便做好准备。 ### Commit Messages 模板 @@ -132,7 +133,8 @@ Signed-off-by: DongQing ``` binary: enhance `SbiRet` structure functions to match `core::result::Result` APIs -- binary: change `SbiRet::and` signature to `fn and(self, res: Result) -> Result` +- binary: change `SbiRet::and` signature to `fn and(self, res: Result) -> Result` + - binary: add function `is_ok_and`, `is_err_and`, `inspect` and `inspect_err` for `SbiRet` structure Signed-off-by: Zhouqi Jiang diff --git a/docs/ch3/sec1/subsec3/1-rebase-merge.md b/docs/ch3/sec1/subsec3/1-rebase-merge.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/ch3/sec1/subsec4/1-linux-patch.md b/docs/ch3/sec1/subsec4/1-linux-patch.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/ch4/index.md b/docs/ch4/index.md index d1fbdf4..8b13789 100644 --- a/docs/ch4/index.md +++ b/docs/ch4/index.md @@ -1,34 +1 @@ -# S4: 领导开源阶段 - **目标** :成为开源项目的领导者,掌握社区管理和开源治理能力。 - -## 一、开源社区及其管理 - -1. **如何组织和维护开源社区** : - -* **Code of Conduct** :深入阐释制定并推行行为准则(Code of Conduct)的必要性,明确其对于营造健康、友好、包容社区氛围的关键作用,以及如何依据社区特性拟定具体条款。 -* **贡献者指南** :详细介绍编写一份全面、易懂且具有吸引力的贡献者指南的要点,涵盖从新手入门指引、开发流程规范,到问题反馈机制等各个环节,助力潜在贡献者快速融入项目。 - -2. **如何吸引和管理贡献者** : - -* **鼓励多样性和贡献** :探讨多种策略激发来自不同背景、技能水平的人员参与开源,如设立多样化的任务模块以适配不同能力层次,举办线上线下交流活动增强社区凝聚力,设置合理激励机制认可贡献者价值,促进社区持续繁荣。 - -## 二、开源社区安全治理 - -1. **如何处理安全问题(如 CVE 报告)** :讲解面对安全漏洞报告(如 CVE 报告)时的应急响应流程,包括漏洞确认、信息发布、修复方案制定与实施,确保社区项目安全性。 -2. **如何保护社区免受恶意代码或行为影响** :分享识别与防范恶意代码注入、恶意行为扰乱社区秩序等安全威胁的方法,例如采用代码审查自动化工具、建立社区成员信誉评级体系,全方位保障社区健康运行。 - -## 三、开源社区合规 - -1. **合规流程的重要性** : - -* **知识产权管理** :强调在开源项目中妥善管理知识产权的重要意义,避免侵权纠纷,保障项目合法权益,阐述如何对代码来源、版权归属进行清晰记录与管控。 -* **许可证合规** :深入剖析开源许可证合规的关键要点,依据不同许可证类型(如 GPL、MIT 等)要求,确保项目的使用、分发、修改等操作严格遵循规定,防范法律风险。 - -2. **如何进行开源项目的合规审计** :介绍开展合规审计的流程、方法与工具,如定期自查代码库许可证一致性、借助专业法务工具审查知识产权隐患,维护项目合规运营。 - -## 四、参考任务 - -1. 创建一个开源项目,撰写清晰的 README 和贡献者指南。 -2. 通过自己的开源项目吸引其他人贡献并管理他们的贡献。 -3. 如果不想长期维护,可以将项目捐献到俱乐部。 diff --git a/mkdocs.yml b/mkdocs.yml index e53316c..7441816 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -67,7 +67,6 @@ markdown_extensions: - toc: permalink: true - extra: social: - icon: octicons/globe-16 @@ -77,34 +76,34 @@ extra: nav: - 欢迎来到开源世界: index.md - - - 零、使用开源: - - 第零章 导览: ch0/index.md - - - 一、了解开源: - - 第一章 导览: ch1/index.md - - - 二、拥抱开源: - - 第二章 导览: ch2/index.md - - - 三、贡献开源: - - 第三章 导览: ch3/index.md - - 如何写好一个 Commit Message: - - RustSBI 社区 Commit Message 规范: ch3/sec1/contributing-to-rustsbi.md - - - 四、领导开源: + - 零、引言: + - 导览: ch0/index.md + - 一、开源简介: + - 导览: ch1/index.md + - 第一节 什么是开源: ch1/sec1/what-is-oss.md + - 第二节 开源简史: ch1/sec2/history-of-oss.md + - 第三节 为什么要开源: ch1/sec3/why-oss.md + - 第四节 怎么做开源: ch1/sec4/how-to-oss.md + - 二、开源基础理论: + - 导览: ch2/index.md + - 第一节 名词解释: ch2/sec1/terminology.md + - 第二节 开源文化: ch2/sec2/culture.md + - 第三节 开源世界规则: ch2/sec3/rules.md + - 三、开源贡献基础技能: + - 导览: ch3/index.md + - 第一节 Git训练营: + - 导学阶段: + - Git简介: ch3/sec1/subsec1/1-git-introduction.md + - 代码托管平台简介: ch3/sec1/subsec1/2-code-hosting-platforms.md + - 注册并熟悉代码托管平台: ch3/sec1/subsec1/3-practice-code-hosting-platforms.md + - 创建并管理仓库: ch3/sec1/subsec1/4-create-repo.md + - 基础阶段: + - 如何写好一个commit message: ch3/sec1/subsec2/6-commit-message.md + - 专业阶段: + - Git Rebase与Git Merge的使用与区别: ch3/sec1/subsec3/1-rebase-merge.md + - 项目阶段: + - 贡献一个Linux patch: ch3/sec1/subsec4/1-linux-patch.md + - 四、领导开源社区: - 第四章 导览: ch4/index.md - - - 五、Git 训练营: - - 第五章导览: ch5/index.md - - 导学阶段: - - Git 简介: ch5/sec1/subsec1/git-introduction.md - - 代码托管平台简介: ch5/sec1/subsec2/code-hosting-platforms.md - - 实践:注册并熟悉代码托管平台: ch5/sec1/subsec3/practice.md - - 创建并管理仓库 (Repository): ch5/sec1/subsec4/create-repo.md - - 基础阶段: ch5/sec2/git-basics.md - - 专业阶段: ch5/sec3/git-advanced.md - - 项目阶段: ch5/sec4/git-projects.md - - 附录: - - 关于本教程: ch99/abouts.md + - 关于本教程: ch99/abouts.md \ No newline at end of file