了解我如何管理我的个人项目(我的 Git/GitHub 工作流程)

2025-06-09

了解我如何管理我的个人项目(我的 Git/GitHub 工作流程)

我将讨论如何使用 Git/GitHub 创建和管理我的项目。此外,我还会讲解如何使用 GitHub 的项目板、问题和拉取请求。

注意:这不是关于 Git/GitHub 的综合教程,所以我不会深入探讨这些主题。

摄影:Yancy Min

和所有刚开始使用 Git 的人一样,当我开始一个项目时,我会创建一个 GitHub 仓库,然后直接提交到该master分支。我不会在开发功能或修复 bug 时从分支中跳出。master

然而,随着我逐渐成长,结识新的开发者,并积累了开发经验,我开始重新思考创建项目的方式。由于我的大部分提交都是“修复拼写错误”、“重构代码”,以及像“哎呀”这样的提交,我的 git 日志最终变得有点乱。因此,我决定重新设计我的工作流程 😉

PS:虽然这是我的 GitHub 工作流程,但您也可以在GitLab或其他 git 托管提供商上执行此操作。

目录

  1. 项目概述
  2. 设置
  3. 项目委员会
  4. 问题和里程碑
  5. GitHub 模板
  6. 拉取请求
  7. 合并分支

1.项目概述

对于这篇文章,我将创建一个书籍数据库应用程序的前端,其中我可以存储我已经阅读的书籍和我计划阅读的书籍。

为什么要创建特定的应用程序?

我只是更喜欢用现有的应用来解释我的工作流程,而不是像以前那样用一个叫“my-awesome-project”的应用。不过我不会把它写完哈哈哈,或者我会写完吗?我只是用它来解释一下。我也会用VS Code

2. 设置

a.首先,让我们为存储库创建一个文件夹并设置初始文件。

在这种情况下,我命名了文件夹hondana-app并进行了NextJS-Styletron - Baseweb初始设置。

Visual Studio Code 顶部有 Google Chrome 浏览器,显示

b.然后使用 VS Code 中的“初始化存储库”按钮或git init在终端中运行将项目初始化为 git 存储库。

c. 随后,我们进行如下初始提交:

打开版本控制侧栏的 VS Code

d. 之后,就该使用 GitHub 了😁 顺便说一句,我刚刚用谷歌将“书架”翻译成了日语,如果你对这个名字感到好奇的话hondana app

创建 GitHub 存储库

一个尚无文件的新 GitHub 存储库

e. 接下来我们推送初始提交。但首先需要添加远程源:



git remote add origin https://github.com/jorenrui/hondana-app.git
git push -u origin master


Enter fullscreen mode Exit fullscreen mode

f. 现在我们已经完成所有设置!

具有初始提交的 GitHub 存储库

3. 项目委员会

在 GitHub 中,你可以创建项目板来管理你的仓库。这样,你就可以将所有的笔记和任务(问题拉取请求)放在一个地方。

GitHub 存储库的空项目选项卡

要创建项目板,请转到您的代码库。然后,转到“项目”选项卡,然后点击“创建项目”,如上所示。

现在,我将其命名为Hondana App。这个项目板将成为该应用的路线图。不过,您可以为一个代码库创建多个项目板。例如,您可以为应用的文档、前端、后端等创建一个项目板。

创建新的 GitHub 项目板

GitHub 也提供了一个项目模板供您使用。看板包含“待办”、“进行中”和“已完成”三个栏目。对我来说,我更喜欢使用带有评审的自动化看板。有了它,问题和拉取请求会自动从“待办”、“进行中”、“评审”和“已完成”四个栏目中移出。不过,如果您是项目中唯一的一个人,那么我建议您使用自动化看板,因为这样就不需要代码评审了。

选择 GitHub 的项目模板

该看板有五列:待办事项、进行中、审核中、审核者已批准和完成。当您创建拉取请求时,它将被添加到“进行中”列。当代码审核完成时,它将被移动到“审核中”列;如果审核者已接受您的拉取请求,它将被移动到“审核者已批准”列。最后,当您将拉取请求合并到“master”分支时,它将被移动到“完成”列

自动化的 GitHub 项目板

由于这个看板是自动化的,我们无需亲自操作。我们只需将我们的问题和拉取请求链接到这个看板即可。下一部分我会教你如何操作。

4. 问题和里程碑

项目板已设置完毕,现在我们来创建一些问题。问题可以是您需要执行的任务,也可以是应用程序中存在的错误。

里程碑

在创建问题之前,我们首先需要创建里程碑。里程碑可以是你为应用设定的目标,也可以是应用的版本号。就我而言,我使用里程碑来对应用进行版本控制。

例如,对于本田应用程序的初始版本,我计划完成以下功能:

  • 用户身份验证
  • 查看我计划阅读、正在阅读和已阅读的书籍列表
  • 添加书籍,我可以在其中设置状态,例如待读、正在读和已完成
  • 删除应用中的书籍

对于应用程序的第二个版本,我计划完成以下功能:

  • 为我读过的书添加注释
  • 添加评论并对我读过的书籍给予 5 星评级
  • 添加搜索功能

这样,与该版本相关的所有问题和拉取请求都可以组织成一个里程碑。

a. 首先,转到存储库的“问题”选项卡,然后单击“里程碑”

GitHub repo 的 Issue Tab 尚无内容。

b. 之后,单击“创建里程碑”以创建一个里程碑。

GitHub 仓库的里程碑选项卡内容

c. 然后输入里程碑的标题。这里我输入了v1作为里程碑的标题。你也可以根据需要添加截止日期。

在 GitHub 上创建新的里程碑

d. 这样,您现在可以在“问题”选项卡 >“里程碑”下查看您创建的里程碑。

GitHub 仓库的里程碑选项卡包含 v1 里程碑

e. 通过点击里程碑,您可以轻松查看与其相关的所有问题。

尚无任何问题的 v1 里程碑

问题

在创建时,您可以通过转到存储库的“问题”选项卡来创建它,如下图所示,或者进入特定的里程碑。

GitHub 的 repo Issue Tab 中

在创建问题时,我的一个朋友教我如何对它们进行分类:

  1. 任务问题- 可以作为史诗问题一部分的小任务。这可以标记为“良好的首个问题”。
  2. 史诗问题——一个被分成多个小问题的大任务。
  3. 错误报告- 它包含修复用户遇到的错误所需的信息。

为了更好地理解它们,让我们创建第一个问题。

任务问题

示例任务问题

在本部分中,我将向您展示如何创建 GitHub 模板,但首先,让我们创建这些问题。

  • 问题标题。如您所见,我将问题标题命名为“任务:添加 Github 模板”,因为这是一个任务问题。
  • 描述。我在创建问题时遵循以下格式:
    • 任务标题
    • 描述
    • 链接史诗问题(可选)
    • 目前还没有关联史诗问题。稍后我会向你展示格式。
  • 受让人。由于我是唯一从事该项目的人,因此我将其分配给了自己。
  • 标签。GitHub 有默认标签可供使用。不过,你也可以根据需要自定义标签并添加新标签。任务/史诗通常被标记为“增强”或“文档”。不过,在本例中,我决定添加“增强”作为其标签,因为我将模板视为功能。

GitHub 的标签列表

  • 项目。通过添加我们之前创建的项目板,我们现在可以看到问题的进度。如您所见,链接问题会自动将其添加到板的“待办事项”列。由于这是一个自动化的项目板,因此您无需手动移动此卡片。

包含单个任务问题的项目板

  • 里程碑。将问题链接到应用程序的v1里程碑后,您现在可以在其下方看到该问题。

包含单个问题的 v1 里程碑

由于任务问题已经完成,我们现在可以继续处理Epic 问题

GitHub 任务问题

史诗问题

现在,让我们创建一个有关应用程序库页面的史诗问题。

史诗问题示例

  • 问题标题。如您所见,我将问题标题命名为“功能:图书馆页面”,因为这是一个史诗级问题。
  • 描述。在创建史诗问题时,我遵循一种格式,其中我写下以下内容:
    • 史诗称号
    • 描述
    • 任务列表
    • 在这种情况下,任务问题尚未链接,因为这些问题尚未创建。
  • 受让人。由于我是唯一从事该项目的人,因此我将其分配给了自己。
  • 标签。我添加了这个enhancement标签。因为这是一个功能请求。
  • 项目。添加后会自动将问题卡放入项目板的待办事项栏中:

包含两个问题的项目板

  • 里程碑。将其链接到v1里程碑后,里程碑将显示在其下方。此外,由于史诗问题由任务组成,您将根据清单看到问题的进度,如下所示:

包含两个问题的 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


Enter fullscreen mode Exit fullscreen mode

然后你会自动切换到新创建的分支。之后,我们来创建模板文件。

模板

要创建一些 GitHub 模板,请.github在应用根目录中创建一个以应用名称命名的文件夹。你的模板将存放在那里。



# Create a directory/folder named `.github`
mkdir .github


Enter fullscreen mode Exit fullscreen mode

然后创建一个名为 的文件夹ISSUE_TEMPLATE。任务、史诗和 Bug 问题的模板将驻留在此。



# Create a directory/folder named 'ISSUE_TEMPLATE' under `.github`
mkdir .github/ISSUE_TEMPLATE


Enter fullscreen mode Exit fullscreen mode

然后创建问题模板和拉取请求模板的文件。



# 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


Enter fullscreen mode Exit fullscreen mode

创建的文件将如下所示:

树状视图中显示的应用程序根目录

任务问题模板

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)


Enter fullscreen mode Exit fullscreen mode

史诗问题模板

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)


Enter fullscreen mode Exit fullscreen mode

错误报告模板

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.


Enter fullscreen mode Exit fullscreen mode

拉取请求模板

最后,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


Enter fullscreen mode Exit fullscreen mode

提交

制作文件后,我们现在提交所做的更改,并将我们新制作的分支连同我们的提交一起推送到origin



git add .
git commit -m 'Add GitHub Templates'
git push --set-upstream origin feature-github-templates


Enter fullscreen mode Exit fullscreen mode

feature-github-templates与 合并master。现在,无论何时创建问题或创建拉取请求,您都会看到模板:

GitHub 问题模板

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 并提交。

选择“压缩并合并”后,您将能够添加提交消息。如下图所示:

GitHub 的压缩和合并表单

对于提交消息:

  • 标题。标题基于 PR 标题和其所解决的问题的名称。
    • 史诗问题:[Finishes #IssueNo] Feature: PR Title #PRNo
    • 任务问题:[Finishes #IssueNo] Task: PR Title #PRNo
    • 错误报告:[Hotfix #IssueNo] PR Title #PRNo
  • 描述。该描述是从 PR 的描述中复制而来的。

合并后,它将创建合并提交,并且项目板中的 PR 将自动移至“完成”状态。然后,您可以删除该分支。

GitHub 合并 PR 后的信息

然后从我的本地存储库中删除该分支:



# Switch to master branch
git checkout master

# Delete `feature-github-templates` branch
git branch -d feature-github-templates


Enter fullscreen mode Exit fullscreen mode

提交现在将如下所示:

提交日志

当你创建变更日志,或者处理包含大量功能的旧项目时,这非常有用。你可以轻松查看每个提交的变更和信息。这就是我更喜欢压缩和合并的原因。此外,我倾向于创建诸如“重构代码”和“修复拼写错误”之类的提交,因此看到清晰的提交日志会让人耳目一新。

总结

在管理代码库时,您可以创建项目板来整理问题和拉取请求。然后,添加里程碑来控制应用的版本。您还可以将问题分为三类:任务、史诗和错误报告。最后,合并您的拉取请求。

这只是管理项目的一种方式。你还可以通过自定义,比如添加一些测试或 GitHub Action,打造你自己的项目。一切由你决定。不妨多尝试,看看哪种方式最适合你 😉。

感谢阅读,祝您编码愉快👩‍💻

链接链接 https://dev.to/jorenrui/a-look-into-how-i-manage-my-personal-projects-my-git-github-workflow-1e7h
PREV
我的 Web 开发流程(第一部分):设计
NEXT
6 个面向前端开发人员的精彩播客