这是一个用Go语言编写的版本控制工具,主要用于教学目的,帮助理解Git的核心概念和工作原理。
- 仓库管理: 初始化Cit仓库,管理仓库配置
- 文件操作: 添加文件到暂存区,跟踪文件变更
- 提交系统: 创建提交记录,管理版本历史
- 分支管理: 创建、切换、删除分支
- 状态查看: 查看工作目录、暂存区和提交状态
- 历史记录: 查看提交历史和分支信息
- Go 1.21 或更高版本
go mod tidy# 构建命令行版本
go build -o cit.exe
# 构建测试版本
go build -o test.exe test.go# 运行功能测试
./test.exe# 在当前目录初始化仓库
cit init
# 在指定目录初始化仓库
cit init /path/to/project# 添加文件到暂存区
cit add <filename>
# 添加多个文件
cit add file1.txt file2.txt
# 添加目录
cit add src/# 提交暂存区的更改
cit commit -m "提交信息"# 查看仓库状态
cit status# 查看提交历史
cit log# 列出所有分支
cit branch
# 创建新分支
cit branch <branch-name>
# 切换到指定分支
cit checkout <branch-name>cit/
├── cmd/ # 命令行界面
│ ├── root.go # 根命令
│ ├── init.go # 初始化命令
│ ├── add.go # 添加命令
│ ├── commit.go # 提交命令
│ ├── status.go # 状态命令
│ ├── log.go # 日志命令
│ ├── branch.go # 分支命令
│ └── checkout.go # 切换命令
├── internal/ # 内部包
│ ├── git/ # Git核心逻辑
│ │ ├── repository.go # 仓库管理
│ │ └── models.go # 数据模型
│ ├── storage/ # 数据存储
│ │ └── storage.go # 存储实现
│ └── utils/ # 工具函数
│ └── utils.go # 通用工具
├── pkg/ # 公共包
├── main.go # 主程序入口
├── test.go # 功能测试
└── go.mod # Go模块文件
当初始化仓库后,会在项目目录下创建 .cit 目录:
.cit/
├── objects/ # 对象存储
│ ├── [hash1]/ # 按哈希分组的对象
│ └── [hash2]/
├── refs/ # 引用管理
│ ├── heads/ # 分支引用
│ └── tags/ # 标签引用
├── repository.json # 仓库配置
├── branches.json # 分支信息
├── commits.json # 提交历史
└── staging.json # 暂存区状态
- Blob对象: 存储文件内容
- Tree对象: 存储目录结构
- Commit对象: 存储提交信息
- 工作目录和提交之间的中间状态
- 通过
add命令添加文件 - 通过
commit命令提交更改
- 每个分支指向一个提交
- 支持创建、切换、删除操作
- 默认分支为
main
- 每个提交都有唯一的哈希ID
- 支持父子关系,形成提交链
- 包含作者、时间、消息等信息
# 1. 初始化仓库
cit init
# 2. 创建文件
echo "Hello, CIT!" > hello.txt
# 3. 添加到暂存区
cit add hello.txt
# 4. 提交更改
cit commit -m "添加问候文件"
# 5. 查看状态
cit status
# 6. 查看历史
cit log# 创建功能分支
cit branch feature-login
# 切换到功能分支
cit checkout feature-login
# 在新分支上工作
echo "登录功能" > login.txt
cit add login.txt
cit commit -m "实现登录功能"
# 切换回主分支
cit checkout main通过这个项目,你可以学习:
- Git工作原理: 理解版本控制系统的核心概念
- Go语言编程: 练习文件操作、数据结构、错误处理
- 命令行开发: 学习使用Cobra框架开发CLI工具
- 系统设计: 理解数据存储、对象模型、状态管理
- 这是一个教学项目,功能相对简化
- 不建议用于生产环境
- 主要用于学习和理解Git的工作原理
- 支持基本的文件操作和版本管理
- 实现树对象和Blob对象
- 添加合并功能
- 支持标签管理
- 实现远程仓库操作
- 添加配置文件支持
- 优化性能和存储效率
本项目仅用于教学目的,请勿用于商业用途。
欢迎提交Issue和Pull Request来改进这个项目!
享受学习Git的乐趣! 🎉