Uninote
Uninote
用户根目录

项目地址:git@git.dajxyl.com:dajx/prj-utils.git

dgc: dump garbage commits

git 中 commits 丢失时,可以通过 git reflog 来找回(比如这里, 和这里)。但在实际操作中会发现,要在一堆 commits 找到想要的,并不容易。这里提供一个脚本,能够更清晰的打印出纯粹的垃圾节点(见 原理 部分)。如果是 Windows 环境,使用 TortoiseGit 则更为简单。

需求:http://video.dajxyl.com/video_play.html?video_url=https://admin.dajxyl.com/oss?path=video/upload/202110/20211001_190619.mp4

$ dgc -h
Usage: dgc [commits-to-find <NUM>] [-c] [-t]

Options:
    commits-to-find <NUM>: 显示NUM条内的垃圾节点,默认100个节点内的垃圾节点
    -c: 则只输出commits,不换行
    -t: 启用TrotoiseGitProc.exe进程,显示100个节点内的垃圾节点.
        前提:TrotoiseGitProc.exe在系统环境变量中获取用户环境变量中.
    -h: 显示用法,并正常退出脚本

注意,Windows 命令行中调用要加 bash

bash dgc 10
bf8a7ac PHPSESSID
8d7d52d demo

原理

比如 git reflog 输出:

a411fd0 (HEAD -> test, origin/dev, origin/HEAD, dev) HEAD@{0}: reset: moving to HEAD~1
55b4d26 HEAD@{1}: commit: t1
a411fd0 (HEAD -> test, origin/dev, origin/HEAD, dev) HEAD@{2}: checkout: moving from dev to test
a411fd0 (HEAD -> test, origin/dev, origin/HEAD, dev) HEAD@{3}: reset: moving to a411fd0a6b65d2eaced2d4e4a37c6e69bdf31495
67db49d HEAD@{4}: commit: 2
de06c59 HEAD@{5}: commit: 1
a411fd0 (HEAD -> test, origin/dev, origin/HEAD, dev) HEAD@{6}: clone: from E:\git_test\test44

其中这三个为 garbage commits(使用 git branch -a --contains xxx 判断(输出为空)):

55b4d26 HEAD@{1}: commit: t1
67db49d HEAD@{4}: commit: 2
de06c59 HEAD@{5}: commit: 1

则 dgc 输出(使用 git log --oneline):

55b4d26 t1
67db49d 2
de06c59 1

dgc 100 -c 输出:

55b4d26 67db49d de06c59

dgc 2 -c 输出(git reflog 输出的前两个节点中有一个是垃圾节点):

55b4d26

ttl 启动乌龟界面(仅限 Windows)

需求:http://video.dajxyl.com/video_play.html?video_url=https://admin.dajxyl.com/oss?path=video/upload/202110/20211002_104850.mp4

演示:http://video.dajxyl.com/video_play.html?video_url=https://admin.dajxyl.com/oss?path=video/upload/202110/20211002_153715.mp4

ttl.bat `dgc -c`
简化为
dgc -t

如果发现输出结果仍然太多,可以配和 git 的 '^' 运算符过滤掉一些非垃圾节点,效果更加,如start TortoiseGitProc.exe /command:log /range:"bf8a7ac 8478991 1c6fe5a 7c53d17 ^origin/demo"(复制并编辑 dgc 的输出,注意要在 Windows cmd 中运行), 得到如下的结果:

ddic: dump docker images chain

需求:循环执行 docker inspect --format='{{.Config.Image}}', 得到 image chain,eg:ddic dajxc7:1,输出以下内容:

dajxc7:1
basic:0
centos:7.9.2009
05e222a9fa848efd0d4dd0969ea27c789a1eff8445d25c4f13f932ead6e3b674

相当于执行以下命令:

[root@pjkdocker ~]# docker inspect --format='{{.Config.Image}}' dajxc7:1
basic:0
[root@pjkdocker ~]# docker inspect --format='{{.Config.Image}}' basic:0
centos:7.9.2009
[root@pjkdocker ~]# docker inspect --format='{{.Config.Image}}' centos:7.0.2009
sha256:05e222a9fa848efd0d4dd0969ea27c789a1eff8445d25c4f13f932ead6e3b674
[root@pjkdocker ~]# docker inspect --format='{{.Config.Image}}' sha256:05e222a9fa848efd0d4dd0969ea27c789a1eff8445d25c4f13f932ead6e3b674

Error: No such object: sha256:05e222a9fa848efd0d4dd0969ea27c789a1eff8445d25c4f13f932ead6e3b674

docviewer

商城-cms

点赞(0) 阅读(1) 举报
目录
标题