# go-gittodo **Repository Path**: flysmallbird/go-gittodo ## Basic Information - **Project Name**: go-gittodo - **Description**: go语言写的git-todo入门项目 - **Primary Language**: Go - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-28 - **Last Updated**: 2025-11-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 项目来由:(https://alidocs.dingtalk.com/i/nodes/dpYLaezmVNgN6pZ3Tg91lNReJrMqPxX6) ## git-todo 命令行 git 拓展机制 git命令行工具提供了这样一种拓展机制来拓展子命令:当使用 git 时,如果该 不是原生的子命令,则会在环境变量路径中寻找名为 git-的可执行文件来执行它。也就是说,当我们输入git todo时,由于 todo 不是 git 的原生子命令,git 会遍历环境变量路径,去寻找一个名为 git-todo的可执行文件,找到后执行它。 基于这种拓展机制,我们可以实现一个拓展插件 git-todo。 首先我们使用 Go 实现一个命令行工具: ``` package main import ( "fmt" ) func main() { fmt.Println("please implement it") } ``` 编译成名为 git-todo的二进制文件,然后将它移动到环境变量路径下。 ``` go build -o git-todo main.go # 构建 git-todo chmod +X git-todo # 有的文件系统需要此操作 mv git-todo /usr/local/bin/ # 移动到环境变量路径下 ``` 验证一下: ``` $ git todo please implement it ``` 可以看到我们已经实现了一个仅仅打印一行字符串的 git todo 插件。 接下来我们为这个 git-todo 添加真实的功能吧! 需求描述 在上一节中,我们实现了一个 git 拓展 git-todo 的原型,但还没有任何功能。我们要实现的 git-todo 应当具备以下能力: - 添加 todo item 用户可以使用类似于git todo add 这样的命令添加 todo 任务项 - 查看 todo items 用户可以使用类似于 git todo list这样的命令查看目前还有哪些待办 todo 任务项 ``` % git todo list 1 this is the first task 2 this is the second task ``` - 标记 todo item 为完成 用户可以使用类似 git todo done 这样的命令标记为任务完成。标记为完成的任务项不再在 git todo list中显示。 - 以上操作都是基于 git branch 粒度。 即查看 todo items 时应当只显示当前 git branch 的任务项,在当前 git branch 下只能为该 branch 创建/删除任务项,不能为其他 branch 创建任务,也不能删除其他 branch 的任务。 - *当分支被删除时,与其相关的 todo items 都应当被删除。 从功能完整性来说,当分支被删除时应当回收与之相关的资源,但实现起来比较复杂,需要了解 git 的拓展机制。故此条不作要求。