Skip to content

code-100-precent/cit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

86 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CIT - Go语言实现的版本控制工具

这是一个用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          # 暂存区状态

🔍 核心概念

1. 对象存储

  • Blob对象: 存储文件内容
  • Tree对象: 存储目录结构
  • Commit对象: 存储提交信息

2. 暂存区

  • 工作目录和提交之间的中间状态
  • 通过 add 命令添加文件
  • 通过 commit 命令提交更改

3. 分支系统

  • 每个分支指向一个提交
  • 支持创建、切换、删除操作
  • 默认分支为 main

4. 提交历史

  • 每个提交都有唯一的哈希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

🎯 学习目标

通过这个项目,你可以学习:

  1. Git工作原理: 理解版本控制系统的核心概念
  2. Go语言编程: 练习文件操作、数据结构、错误处理
  3. 命令行开发: 学习使用Cobra框架开发CLI工具
  4. 系统设计: 理解数据存储、对象模型、状态管理

⚠️ 注意事项

  • 这是一个教学项目,功能相对简化
  • 不建议用于生产环境
  • 主要用于学习和理解Git的工作原理
  • 支持基本的文件操作和版本管理

🔧 开发计划

  • 实现树对象和Blob对象
  • 添加合并功能
  • 支持标签管理
  • 实现远程仓库操作
  • 添加配置文件支持
  • 优化性能和存储效率

📝 许可证

本项目仅用于教学目的,请勿用于商业用途。

🤝 贡献

欢迎提交Issue和Pull Request来改进这个项目!


享受学习Git的乐趣! 🎉

About

cit是一款仿Git的分布式版本控制工具

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages