前言
昨天红薯在码云团队群里面问,又没有办法在 J2Cache 存储库中新建一个没有历史记录的分支 (J2Cache 3.0)?并且不清空重建现有本地存储库。小伙伴们大多都说不行,我打开 TIM App 一看,这不就是创建一个 commit 然后让它没有爸爸
么?很简单啊,实际上 git 命令就可以做到,但命令非常复杂,我也不记得了,但我们可以使用 git-cheat 来实现,命令非常简单:
git-cheat new_branch commit_msg
git-cheat 是笔者开发的 中的一个工具,本文的目的就是告诉各位如何使用它来做一些无聊的事情。
Git-Analyze 简介
笔者在前面写过 和 ,所以简介和原理也就不多说了,这里主要是介绍怎么玩耍。
TODO
Git-Analyze 工具
git-analyze 工具可以分析当前的存储库从什么时候将大文件引入到存储库中,是哪儿伙计没有注意引入了,文件路径是什么,大家都知道码云迫于服务器负载和存储压力,对用户的存储库配额有一定的限制,超过配额导致用户访问出现限制时有发生。用户可以使用 git-analyze 工具分析存储库并使用 git-rollback
或者 git filter-branch
这样的工具将存储库体积缩小,并情况远程存储库,重新推送即可重新访问。Usage 如下:
OVERVIEW: GIT analyze toolsUsage: git-analyze...] [--] [ ...] [ ...]OPTIONS: -h [--help] print usage and exit --limitsize set analyze engine limit blob size --warnsize set analyze engine warn blob size --timeout set analyze engine lifycycle --who show who is commit author --all analyze will scanf all refs
截图如下:
Git-Rollback 工具
Rollback 工具作用比较鸡肋,可以使用 git-reset 或者魔改 .git/refs/$branch
,但还是说一下,Usage 如下:
OVERVIEW: GIT rollback toolsUsage: git-rollback...] [--] [ ...] [ ...]OPTIONS: -h [--help] print usage and exit --git-dir set rollback repository path --backid set rollback commit id --backrev set rollback current back X rev --refname set rollback current reference name --force force gc prune
Rollback 分支不会把当前 worktree
修改弄丢。当然 git filter-branch
更牛逼了。
Git-Complete 工具
此工具的作用是刷满一年的贡献度,你也可以从某一年刷到某一年。
git-complete dir branch 'commit message' 2018
Git-Cheat
git-cheat 可以基于当前分支创建一个只有一个 commit 的分支,此分支的提交信息,树对象等都与当前分支 一致,但没有父提交。很容易看到的一个场景是,用户清理项目后,创建一个提交,然后在此提交的基础上 使用 git-cheat 开源。
命令格式:
OVERVIEW: Make a special git branch: git-cheatUsage: git-cheat [options] OPTIONS: -g,--git-dir Git repository dir,default open pwd, pos 0 -b,--branch New branch name, pos 1 -m,--message New commit message, pos 2 -p,--parent The new branch tree is based on which commit/branch. -t,--tree Subtree or current commit root tree. -d,--date New commit time. -a,--author New commit author, default use old author. -c,--committer New commit committer, default use old author. -e,--author-email Author email. -E,--committer-email Committer email.SWITCH: -k,--keep Keep commit signature. -v,--version Print version information and exit. -V,--verbose Print verbose message. -h,--help Print help information and exit.example: git-cheat . tool "new tools branch" --tree tools #new branch tool base subtree tools.
Update 2018-05-28 目前 git-cheat 支持使用特定的子树新建分支,这意味着,我们可以无损的将存储库的特定分支特定 commit 特定子目录新建一个新的分支用于开源或者重新开发等其他目的。
这个命令会将当前分支的 tree 拷贝过去,如果你不需要这些文件,可以先新建一个分支,在分支中删除所有的文件,提交,然后再使用 git-cheat
去操作存储库。
Pre-commit 钩子
这个钩子主要是拦截大文件提交。截图如下:
总结
如果有人觉得有意思或者有什么问题,可以打开 Issues 反馈 。也可以在 Issues 中提交新的功能请求。