了解我如何管理我的个人项目(我的 Git/GitHub 工作流程)
我将讨论如何使用 Git/GitHub 创建和管理我的项目。此外,我还会讲解如何使用 GitHub 的项目板、问题和拉取请求。
注意:这不是关于 Git/GitHub 的综合教程,所以我不会深入探讨这些主题。
摄影:Yancy Min
和所有刚开始使用 Git 的人一样,当我开始一个项目时,我会创建一个 GitHub 仓库,然后直接提交到该master
分支。我不会在开发功能或修复 bug 时从分支中跳出。master
然而,随着我逐渐成长,结识新的开发者,并积累了开发经验,我开始重新思考创建项目的方式。由于我的大部分提交都是“修复拼写错误”、“重构代码”,以及像“哎呀”这样的提交,我的 git 日志最终变得有点乱。因此,我决定重新设计我的工作流程 😉
PS:虽然这是我的 GitHub 工作流程,但您也可以在GitLab或其他 git 托管提供商上执行此操作。
目录
1.项目概述
对于这篇文章,我将创建一个书籍数据库应用程序的前端,其中我可以存储我已经阅读的书籍和我计划阅读的书籍。
为什么要创建特定的应用程序?
我只是更喜欢用现有的应用来解释我的工作流程,而不是像以前那样用一个叫“my-awesome-project”的应用。不过我不会把它写完哈哈哈,或者我会写完吗?我只是用它来解释一下。我也会用VS Code。
2. 设置
a.首先,让我们为存储库创建一个文件夹并设置初始文件。
在这种情况下,我命名了文件夹hondana-app
并进行了NextJS-Styletron - Baseweb初始设置。
b.然后使用 VS Code 中的“初始化存储库”按钮或git init
在终端中运行将项目初始化为 git 存储库。
c. 随后,我们进行如下初始提交:
d. 之后,就该使用 GitHub 了😁 顺便说一句,我刚刚用谷歌将“书架”翻译成了日语,如果你对这个名字感到好奇的话hondana app
。
e. 接下来我们推送初始提交。但首先需要添加远程源:
git remote add origin https://github.com/jorenrui/hondana-app.git
git push -u origin master
f. 现在我们已经完成所有设置!
3. 项目委员会
在 GitHub 中,你可以创建项目板来管理你的仓库。这样,你就可以将所有的笔记和任务(问题和拉取请求)放在一个地方。
要创建项目板,请转到您的代码库。然后,转到“项目”选项卡,然后点击“创建项目”,如上所示。
现在,我将其命名为Hondana App。这个项目板将成为该应用的路线图。不过,您可以为一个代码库创建多个项目板。例如,您可以为应用的文档、前端、后端等创建一个项目板。
GitHub 也提供了一个项目模板供您使用。看板包含“待办”、“进行中”和“已完成”三个栏目。对我来说,我更喜欢使用带有评审的自动化看板。有了它,问题和拉取请求会自动从“待办”、“进行中”、“评审”和“已完成”四个栏目中移出。不过,如果您是项目中唯一的一个人,那么我建议您使用自动化看板,因为这样就不需要代码评审了。
该看板有五列:待办事项、进行中、审核中、审核者已批准和完成。当您创建拉取请求时,它将被添加到“进行中”列。当代码审核完成时,它将被移动到“审核中”列;如果审核者已接受您的拉取请求,它将被移动到“审核者已批准”列。最后,当您将拉取请求合并到“master”分支时,它将被移动到“完成”列。
由于这个看板是自动化的,我们无需亲自操作。我们只需将我们的问题和拉取请求链接到这个看板即可。下一部分我会教你如何操作。
4. 问题和里程碑
项目板已设置完毕,现在我们来创建一些问题。问题可以是您需要执行的任务,也可以是应用程序中存在的错误。
里程碑
在创建问题之前,我们首先需要创建里程碑。里程碑可以是你为应用设定的目标,也可以是应用的版本号。就我而言,我使用里程碑来对应用进行版本控制。
例如,对于本田应用程序的初始版本,我计划完成以下功能:
- 用户身份验证
- 查看我计划阅读、正在阅读和已阅读的书籍列表
- 添加书籍,我可以在其中设置状态,例如待读、正在读和已完成
- 删除应用中的书籍
对于应用程序的第二个版本,我计划完成以下功能:
- 为我读过的书添加注释
- 添加评论并对我读过的书籍给予 5 星评级
- 添加搜索功能
这样,与该版本相关的所有问题和拉取请求都可以组织成一个里程碑。
a. 首先,转到存储库的“问题”选项卡,然后单击“里程碑”。
b. 之后,单击“创建里程碑”以创建一个里程碑。
c. 然后输入里程碑的标题。这里我输入了v1作为里程碑的标题。你也可以根据需要添加截止日期。
d. 这样,您现在可以在“问题”选项卡 >“里程碑”下查看您创建的里程碑。
e. 通过点击里程碑,您可以轻松查看与其相关的所有问题。
问题
在创建时,您可以通过转到存储库的“问题”选项卡来创建它,如下图所示,或者进入特定的里程碑。
在创建问题时,我的一个朋友教我如何对它们进行分类:
- 任务问题- 可以作为史诗问题一部分的小任务。这可以标记为“良好的首个问题”。
- 史诗问题——一个被分成多个小问题的大任务。
- 错误报告- 它包含修复用户遇到的错误所需的信息。
为了更好地理解它们,让我们创建第一个问题。
任务问题
在本部分中,我将向您展示如何创建 GitHub 模板,但首先,让我们创建这些问题。
- 问题标题。如您所见,我将问题标题命名为“任务:添加 Github 模板”,因为这是一个任务问题。
- 描述。我在创建问题时遵循以下格式:
- 任务标题
- 描述
- 链接史诗问题(可选)
- 目前还没有关联史诗问题。稍后我会向你展示格式。
- 受让人。由于我是唯一从事该项目的人,因此我将其分配给了自己。
- 标签。GitHub 有默认标签可供使用。不过,你也可以根据需要自定义标签并添加新标签。任务/史诗通常被标记为“增强”或“文档”。不过,在本例中,我决定添加“增强”作为其标签,因为我将模板视为功能。
- 项目。通过添加我们之前创建的项目板,我们现在可以看到问题的进度。如您所见,链接问题会自动将其添加到板的“待办事项”列。由于这是一个自动化的项目板,因此您无需手动移动此卡片。
- 里程碑。将问题链接到应用程序的v1里程碑后,您现在可以在其下方看到该问题。
由于任务问题已经完成,我们现在可以继续处理Epic 问题。
史诗问题
现在,让我们创建一个有关应用程序库页面的史诗问题。
- 问题标题。如您所见,我将问题标题命名为“功能:图书馆页面”,因为这是一个史诗级问题。
- 描述。在创建史诗问题时,我遵循一种格式,其中我写下以下内容:
- 史诗称号
- 描述
- 任务列表
- 在这种情况下,任务问题尚未链接,因为这些问题尚未创建。
- 受让人。由于我是唯一从事该项目的人,因此我将其分配给了自己。
- 标签。我添加了这个
enhancement
标签。因为这是一个功能请求。 - 项目。添加后会自动将问题卡放入项目板的待办事项栏中:
- 里程碑。将其链接到v1里程碑后,里程碑将显示在其下方。此外,由于史诗问题由任务组成,您将根据清单看到问题的进度,如下所示:
既然史诗问题已经创建,现在让我们创建这些任务。
在这些任务中,我们现在可以链接它的史诗父级,即Feature: Library Page #2
。
创建所有任务后,我们现在可以更新史诗问题并链接任务。
此后,您就完成了。
错误报告
由于Hondana App尚无任何错误,因此让我在我的 create-project repo 中展示一个示例错误。
- 问题标题。如您所见,我将问题标题命名为“Bug:修复 npm 中的损坏链接”,因为这是一个错误报告。
- 描述。在创建 Bug 时我遵循一种格式,其中我写了以下内容:
- 标题
- 描述
- 重现错误的步骤(可选)
- 预期结果(可选)
- 实际结果(可选)
- 受让人。由于我是唯一从事该项目的人,因此我将其分配给了自己。
- 标签。我添加了
bug
标签。因为这是错误报告。 - 项目。添加后会自动将问题卡放入项目板的待办事项栏中。
5. GitHub 模板
现在是时候向您展示如何创建 GitHub 模板了!因此,在本部分中,我们将处理这个问题:任务:添加 GitHub 模板 #1。
拓展业务
每当我处理功能请求或错误修复时,我首先会从master
分支创建一个分支(有时可以是develop
分支本身)。
对于分支的命名,我遵循以下格式:
- 错误修复:
hotfix-issue-name
- 功能要求:
feature-issue-name
因此在这个例子中,我将从feature-github-templates
分支创建master
:
# Create a branch named `feature-github-templates` from the current branch
git checkout -b feature-github-templates
然后你会自动切换到新创建的分支。之后,我们来创建模板文件。
模板
要创建一些 GitHub 模板,请.github
在应用根目录中创建一个以应用名称命名的文件夹。你的模板将存放在那里。
# Create a directory/folder named `.github`
mkdir .github
然后创建一个名为 的文件夹ISSUE_TEMPLATE
。任务、史诗和 Bug 问题的模板将驻留在此。
# Create a directory/folder named 'ISSUE_TEMPLATE' under `.github`
mkdir .github/ISSUE_TEMPLATE
然后创建问题模板和拉取请求模板的文件。
# Create the markdown files
touch .github/ISSUE_TEMPLATE/bug_report.md
touch .github/ISSUE_TEMPLATE/epic_issue.md
touch .github/ISSUE_TEMPLATE/small_issue.md
touch .github/PULL_REQUEST_TEMPLATE.md
创建的文件将如下所示:
任务问题模板
该small_issue.md
遗嘱包含以下内容:
---
name: Task
about: A small task that is, most likely, part of an Epic. It will usually be labeled as `good first issue`.
---
<!-- Issue title should mirror the Task Title. -->
# Task Title
Task: Awesome Task Title
## Task Description
This Task will...
## Epic Parent
<!-- The link below should link to its Epic Parent. -->
[Feature: Awesome Feature Title](https://github.com/username/repository-name/issues/1)
史诗问题模板
该epic_issue.md
遗嘱包含以下内容:
---
name: Epic
about: A task large enough that it needs to be divided into smaller tasks. It will usually be labeled as `enhancement`.
---
<!-- Issue title should mirror the Epic Title. -->
# Epic Title
Feature: Awesome Feature Title
## Epic Description
This Feature will...
## List of Tasks (Complete in order)
1. [ ] [Task 1: Awesome Task Title](https://github.com/username/repository-name/issues/1)
2. [ ] [Task 2: Awesome Task Title](https://github.com/username/repository-name/issues/2)
错误报告模板
该bug_report.md
遗嘱包含以下内容:
---
name: Bug report
about: Create a report to help us improve
---
<!-- Please search existing issues to avoid creating duplicates. -->
# Bug Report
Bug: Not so Awesome Bug Title
## Description
Info about the bug goes here.
### Steps to Reproduce
1. Step 1
2. Step 2
### Expected Result
The expected result was...
You may write the expected result or add a screenshot.
### Actual Results
The actual result was...
Would be awesome to link screenshots here and/or error messages received.
拉取请求模板
最后,PULL_REQUEST_TEMPLATE.md
遗嘱内容如下:
# Story Title
[This is the Issue Title](https://github.com/username/repository-name/issues/1)
## Changes made
- made this
- did that
## How does the solution address the problem
This PR will...
## Linked issues
Resolves #1
提交
制作文件后,我们现在提交所做的更改,并将我们新制作的分支连同我们的提交一起推送到origin
。
git add .
git commit -m 'Add GitHub Templates'
git push --set-upstream origin feature-github-templates
已feature-github-templates
与 合并master
。现在,无论何时创建问题或创建拉取请求,您都会看到模板:
6. 拉取请求
现在我们已经完成了 GitHub 模板的创建,我们现在可以创建一个Pull 请求。
当你检出你的仓库时,你最近推送的分支会显示出来。你可以点击“比较并拉取请求”按钮来创建 PR。
或者您可以转到feature-github-templates
分支并单击拉取请求,如下所示:
那么现在让我们创建一个 Pull 请求,我们将它与master
分支进行比较。
如果您有审阅者,那么您的代码将需要获得批准。
Pull 请求的格式为:
- PR 标题。PR 的标题取决于它要解决的问题。
- 任务问题:
Task: Issue Name
- 史诗问题:
Feature: Issue Name
- 错误报告:
Hotfix: Issue Name
或者可以是关于修复的自定义名称。
- 任务问题:
- 故事标题。这是问题名称。
- 已做更改。这是您的提交摘要。您可以在此处添加与更改相关的术语和其他技术细节。例如:
- 添加 Redux 作为状态容器
- 添加主题提供商
- 解决方案如何解决这个问题。它会包含一个面向普通用户的解释。例如:这个 PR 将添加应用程序的登录和注销功能。
- 已链接的议题。添加后,
resolves #IssueNo
拉取请求合并后,关联的议题将自动关闭。更多信息,请参阅 GitHub 的“将拉取请求链接到议题” 。
7. 合并分支
当我合并分支时,我更喜欢使用“压缩并合并”操作。此操作会在合并之前将分支压缩为一个提交。稍后我会解释为什么我更喜欢这种方式。
编辑:我不再使用压缩和合并了,因为它会严重影响历史记录。现在,我更喜欢使用普通的 git merge 并提交。
选择“压缩并合并”后,您将能够添加提交消息。如下图所示:
对于提交消息:
- 标题。标题基于 PR 标题和其所解决的问题的名称。
- 史诗问题:
[Finishes #IssueNo] Feature: PR Title #PRNo
- 任务问题:
[Finishes #IssueNo] Task: PR Title #PRNo
- 错误报告:
[Hotfix #IssueNo] PR Title #PRNo
- 史诗问题:
- 描述。该描述是从 PR 的描述中复制而来的。
合并后,它将创建合并提交,并且项目板中的 PR 将自动移至“完成”状态。然后,您可以删除该分支。
然后从我的本地存储库中删除该分支:
# Switch to master branch
git checkout master
# Delete `feature-github-templates` branch
git branch -d feature-github-templates
提交现在将如下所示:
当你创建变更日志,或者处理包含大量功能的旧项目时,这非常有用。你可以轻松查看每个提交的变更和信息。这就是我更喜欢压缩和合并的原因。此外,我倾向于创建诸如“重构代码”和“修复拼写错误”之类的提交,因此看到清晰的提交日志会让人耳目一新。
总结
在管理代码库时,您可以创建项目板来整理问题和拉取请求。然后,添加里程碑来控制应用的版本。您还可以将问题分为三类:任务、史诗和错误报告。最后,合并您的拉取请求。
这只是管理项目的一种方式。你还可以通过自定义,比如添加一些测试或 GitHub Action,打造你自己的项目。一切由你决定。不妨多尝试,看看哪种方式最适合你 😉。
感谢阅读,祝您编码愉快👩💻
链接链接 https://dev.to/jorenrui/a-look-into-how-i-manage-my-personal-projects-my-git-github-workflow-1e7h