码云 Git Analyze 工具集更新 原 荐

Git Analyze

Git Analyze 是码云团队开发的跨平台 git 附加工具,在前文 Git Analyze 工具实现与原理 中介绍了 git-analyze ,git-analyze 功能主要是分析存储库从哪次提交引入了体积较大的文件,而 git-rollback 则可以根据用户输入的 commit 或者回滚版本将存储库回滚到早期提交,并且当前工作目录的文件并不发生任何修改,这样依赖可以有效的减小存储库的体积。

Git Analyze 更新

笔者在码云主要负责服务器和 git 原生工具的开发,

Git Cheat

git-cheat 可以基于当前分支创建一个只有一个 commit 的分支,此分支的提交信息,树对象等都与当前分支一致,但没有父提交。 很容易看到的一个场景是,用户清理项目后,创建一个提交,然后在此提交的基础上使用 git-cheat 创建干净的提交并且开源。

命令格式:

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 参数时修改全局设置。

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。

下图是开启排除文件图片: 输入图片说明

实际上 pre-commit 也可以使用 shell 脚本编写,git diff --cached 参数可以比较暂存区和 HEAD 文件修改,笔者更习惯使用 C++,所以也就直接使用 libgit2 编写了。

最后

如果要了解更多的细节以及下载预编译的二进制可以去码云上 Git Analyze 项目主页。

查看 Git Analyze 的源码: oscstudio/git-analyze

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章