# pit **Repository Path**: louis_sun/pit ## Basic Information - **Project Name**: pit - **Description**: 版本管理软件,利用python实现了git的部分功能,十分简陋 - **Primary Language**: Python - **License**: BSD-2-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-11-25 - **Last Updated**: 2021-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # pit #### 介绍 版本管理软件,利用python实现了git的部分功能,十分简陋 主要参照了git的思路,利用commit、tree、blob文件共同管理所有文件及提交。目前实现了管理库创建、提交和提取指定提交三个功能 #### 版本更新说说明 ##### 2021年12月5日20:36:27 将copy时的名字改为当前“store_of_工作目录\_时间” ##### 2021年12月11日15:31:51 BugFix:将写入配置文件的ZipFileName更正为ZipDefaultName #### 功能说明 1. 管理库建立:创建./.pit文件夹及相关子文件夹 2. **提交**-为每个文件创建备份:遍历所有文件,计算hash,判断库中是否已经包含,若是尚未包含,则利用tar打包后存入./.pit/object库中。 3. **提交**-利用tree-obj记录文件夹结构:为每一个文件夹创建一个tree文件,包含其所有的子文件夹和子文件。 4. **提交**-利用commit-obj记录提交:为每一次提价创建commit obj,用于记录提交时的顶层tree obj。与git相同,在提交时可以加入提交说明。每个commit obj包含着其父commit obj、顶层tree obj、提交说明和提交时间。 5. **提交**-选择性备份:类似于.gitignored文件,本软件使用.pitignored文件来判断是否需要被备份。每一行为一个规则,末尾有'/'表示此规则适用于文件夹。目前只是判断文件名或者文件夹名是否包含指定字符 6. **提取**-将指定commit提取到指定的路径中:本软件支持利用commit hash或者`master^`形式指定commit。其中`^`的个数表示从后数第几个commit。与git中不同,本软件提取时不能直接覆盖现有文件,需要指定提取后文件的保存路径,若是未给出,将会在./.pit/.history中以被提取的commit的hash创建目录,并放置所提取文件。 7. **提取**-将指定commit提取到指定路径中,并打包:与直接提取相同,不过在提取完毕后,将所提取的文件打包成zip文件放入提取路径中。通过“.pit/configure"文件配置目标目录。若ZipTargetFile为null,则打包到提取路径中,否则打包至指定目录中。ZipDefaultName若为null,则打包文件名为”工作目录+提交时间“ #### 命令说明 1. pit init创建版本管理库 2. pit commit 提交当前文件夹及其子文件夹里的所有文件 3. pit extract 将某一版本提取到指定目录 4. pit extar 将某一版本提取到指定目录并打包成zip文件 5. pit log 打印提交历史 5. *pit copy 将当前的库打包,用于移动* #### 现有问题 1. 不清楚是否能够在linux平台使用 2. pitignore功能支持不完善 3. help文档不完善 4. 未考虑hash碰撞造成部分文件无法备份的问题 5. ~~在提取时,若给定路径为当前目录,可能会因为文件已存在导致报错~~,,目标目录不为空,因此报错 6. 不能单独提取某个文件或者某个文件夹