码云 Git Analyze 工具集更新

2017-01-11 15:23:30来源:oschina作者:Force武装卫队人点击



# Git Analyze
Git Analyze 是码云团队开发的跨平台 git 附加工具,在前文 [Git Analyze 工具实现与原理](https://my.oschina.net/GIIoOS/blog/732526) 中介绍了 git-analyze ,git-analyze 功能主要是分析存储库从哪次提交引入了体积较大的文件,而 git-rollback 则可以根据用户输入的 commit 或者回滚版本将存储库回滚到早期提交,并且当前工作目录的文件并不发生任何修改,这样依赖可以有效的减小存储库的体积。
# Git Analyze 更新
笔者在码云主要负责服务器和 git 原生工具的开发,
## Git Cheat
git-cheat 可以基于当前分支创建一个只有一个 commit 的分支,此分支的提交信息,树对象等都与当前分支一致,但没有父提交。
很容易看到的一个场景是,用户清理项目后,创建一个提交,然后在此提交的基础上使用 git-cheat 创建干净的提交并且开源。
命令格式:
```bash
git-cheat branch commit-message
```
git-cheat 的原理非常简单,当我们创建一个提交时,此提交可能拥有 parent 提交,当 parent 存在时,就可以回溯,回溯的轨迹反向就是历史记录了,如果没有 parent 提交时,那就没有历史记录可以查询了。我们知道,在 git 中,维系这些 commit 等等对象的是引用,当 commit 不属于任何 commit,又没有被引用记录,那么它将无立锥之地,也就是成了悬空对象,而推送到远程服务器上也是由引用或者子提交维系的。
使用 git-cheat 创建的分支如果推送到服务器上,只会推送当前工作目录中纳入版本控制的所有文件和树对象,还有唯一的那个提交了。
## Git Complete
git-complete 可能是一个有争议的工具,按照格式输入,git-complete 将在当前的存储库创建整整一年的提交,当然,要实现贡献度绘制图形,笔者并没有做,使用这个工具,什么连击 365 天随随便便了,友商的代码托管平台一样有效。
git-complete 原理非常简单,比如 git commit 有参数 `--date` 可以设置提交时间,同样的在 libgit2 中,也可以通过设置 `git_signature` 的字段 `when` 来设置提交时间,而时间可以依次使用 `time` `localtime` `mktime` 合成。
## Pre commit 钩子
pre-commit 是 git 的一类钩子,当用户创建提交,也就是 git commit -m 后,如果存储库中有此类钩子,
git-commit 就会执行 pre-commit 钩子,用户在创建提交时,很容易将大文件或者二进制文件提交到存储库,
等到推送到代码托管平台被拒绝时撤销更改就非常麻烦了。使用 pre-commit 可以避免此类问题,
用户将 pre-commit 软链到 `.git/hooks/pre-commit` 就行了,用户可以通过命令 git config 设置存储库或者全局的 pre-commit 配置,添加 --global 参数时修改全局设置。```bash
git config commit.limitsize 100M # limit file size
git config commit.warnsize 50M # report warning file size
git config commit.filters "/.(exe|obj|pdb)$" # filter regex
git config commit.filterbroken true # filter broken when find
```
这里 limitsize 即限制文件大小,单位可以是 K,M,G 不区分大小写。warnsize 是警告提示大文件,大小为 limitszie 的一半就可以了。
而 filters 是一个正则表达式,pre-commit 内部编译正则表达式,然后检测是否引入和添加了匹配的文件,如果匹配就提示错误。filterbroken 是设置当存在过滤文件时是否终止提交。默认为 false。下图是开启排除文件图片:
![输入图片说明](/2014th7cj/d/file/p/20170111/ulltfkry3ik.png "在这里输入图片标题")
实际上 pre-commit 也可以使用 shell 脚本编写,`git diff --cached` 参数可以比较暂存区和 HEAD 文件修改,笔者更习惯使用 C++,所以也就直接使用 libgit2 编写了。
# 最后
如果要了解更多的细节以及下载预编译的二进制可以去码云上 Git Analyze 项目主页。
查看 Git Analyze 的源码: [oscstudio/git-analyze](http://git.oschina.net/oscstudio/git-analyze) 。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台