Skip to content

About

Batch insight across many git repos: status, path history, zero-config identity audit 批量洞察多个 git 仓库:状态、路径历史、零配置身份审计

Topics

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

insight-git

简体中文 | English

Go License

insight-git 是一个用来批量管理和分析多个 Git 仓库的命令行工具。

如果你的机器上散落着几十上百个仓库,平时要操心「哪些忘了提交、哪些忘了推送、哪个分支落后了远端、今天写了多少代码、哪些仓库在依赖某个模块」——这些跨仓库的琐事,insight-git 用一条命令帮你扫完。它还顺带集成了 GitLab / Gitea 平台操作、Go 项目结构分析、代码阅读追踪等能力。


目录


它能做什么

  • 一屏总览 —— status 把未提交、未推送、落后远端汇成一屏,一条命令看完所有仓库的健康,不用分别跑 commit / push / behind。
  • 全盘普查 —— census 把整次扫描收敛成几个计数:多少仓库已废弃、多少只存在于这块盘上、多少揣着从未推送的提交、近两年的提交里 AI 署名占多大比例。status 是每个仓库一行,census 是全盘一份报告。
  • 多仓库巡检 —— 一次性扫描配置目录下的所有仓库,找出忘记提交、忘记推送、落后远端的仓库。
  • 分支落后检测 —— check behind 精确判断每个本地分支相对其上游远端分支的状态(领先 / 落后 / 分叉 / 无上游 / 已删除 …),支持批量并发。
  • 未提交行数统计 —— check dirty-lines 报告当前仓库相对 HEAD 有多少行未提交(暂存+未暂存)。
  • 路径历史 —— history 告诉你某个文件/目录第一次被提交和最后一次被修改分别是哪个 commit、什么时间;文件默认跨重命名追溯。
  • Git 身份管理与泄露审计 —— user 在配置里预定义若干身份,一条命令给某个仓库设定专属 user.name/user.email;user audit 更进一步,零配置扫描历史,揪出「拿公司邮箱提交了开源仓库」这类身份跑错仓库的情况。
  • 代码量统计 —— 按天、按区间统计所有仓库的增删行数,支持表格 / 终端 UI / 网页三种展示。
  • Git 快捷操作 —— ac / acp 一步完成 add+commit(+push),外加目录树、remote 列表等便捷视图。
  • 代码阅读追踪 —— 记录某个仓库里哪些源码文件已经读过、还剩哪些没读。
  • Go 项目分析 —— 输出 Go 项目结构统计,或反查「哪些仓库依赖了某个 module / package」。
  • 仓库索引 —— 把目录树里所有 Git 仓库的元信息采集进 SQLite,便于后续查询排序。
  • 平台集成 —— GitLab / Gitea 的项目、镜像、远程管理,以及 GitLab → 本地的批量同步。

安装

运行时只需 Git ≥ 2.13.0(check behind 依赖 git for-each-ref 的 upstream:track 特性)。go install 与源码构建另需 Go 1.25+。

方式一:go install(有 Go 环境,最省事)

go install github.com/xunull/insight-git@latest

装到 $GOPATH/bin,二进制名 insight-git,版本号从模块信息自动带出。

方式二:下载预编译二进制(无需 Go)

到 Releases 下载对应平台的压缩包(linux / macOS × amd64 / arm64),解压后把 insight-git 放进 PATH。

方式三:从源码构建

git clone https://github.com/xunull/insight-git.git
cd insight-git
make build      # 构建到 ./bin/insight-git(带版本号信息)
make install    # 或安装到 $GOPATH/bin

装好后先跑 insight-git config init 生成起步配置(见配置文件)。


快速开始

# 1. 在家目录放一份配置(见下一节)
vim ~/.insight-git.yaml

# 2. 看看哪些仓库忘了提交 / 推送
insight-git check commit
insight-git check push

# 3. 检查所有仓库当前分支有没有落后远端
insight-git check behind

# 4. 只看当前目录这一个仓库的全部分支落后情况
insight-git check behind .

# 5. 统计今天写了多少代码
insight-git today

# 6. 看看某个文件是什么时候进仓库的、最后一次改是什么时候
insight-git history pkg/git_client/open.go

# 7. 给公司项目单独设一个 git 身份;并扫描历史,看有没有身份跑错了仓库
insight-git user set work
insight-git user check          # 配置视图:各仓库配置成谁提交
insight-git user audit          # 历史视图:谁实际提交过(零配置可跑)

不带子命令直接运行 insight-git 会打印帮助。任意命令加 -h 查看该命令的完整选项。


配置文件

默认从 $HOME/.insight-git.yaml 读取,也可以用 --config <path> 指定。字段名大小写不敏感。

第一次使用可以跑 insight-git config init 生成一份带注释的起步配置(所有仓库根默认注释掉,取消注释并改成你的真实路径即可);insight-git config path 打印当前生效的配置路径。

# 存放 Git 仓库的根目录(可多个)——多仓库巡检的扫描范围
gitHome:
  - /path/to/your/repos
  - /path/to/another/workspace

# GitHub 仓库根目录——github-backup 系列命令使用
gitHubHome:
  - /path/to/github/repos

# 命名的仓库根目录映射,配合全局参数 --root 使用
repoRootMap:
  others: /path/to/other/repos

# 扫描目录深度(默认 2)
depth: 2

# 预定义的 git 身份,供 user set 使用。alias 唯一,是你实际敲的名字;
# name / email 一一对应 git 的 user.name / user.email
gitUsers:
  - alias: oss
    name: your-name
    email: you@personal.com
  - alias: work
    name: your-work-name
    email: you@company.com
    signingKey: ""          # 可选,对应 user.signingkey

# 身份审计(user check / user audit)的扫描根,与 gitHome 解耦——
# 身份最容易出错的往往正是日常巡检不覆盖的那些目录
userScanHome:
  - /path/to/work/repos
  - /path/to/other/repos

# 备份 remote 的基址(backup / github-backup 使用)
BackupRemote: http://backup.example.com/backup

# 可配置多个 GitLab 实例,用 name 区分;不指定 name 时默认取第一个
gitlab:
  - name: my-gitlab
    host: https://gitlab.example.com
    token: <your-gitlab-token>
    user: <your-user>

# Gitea 实例配置(⚠️ 当前 gitea 相关代码可能不可用,后续版本会更新)
gitea:
  token: <your-gitea-token>
  host: http://gitea.example.com
  apiHost: http://gitea.example.com/api/v1
  githubBackupOrg: github-backup
  proxy: http://127.0.0.1:1080

# readthis 命令默认使用的 remote 名(对应某个 gitlab.name)
read_this_remote: my-gitlab

⚠️ 配置里的 token 是敏感信息,请勿提交到仓库。

全局参数

以下参数对所有命令生效:

参数 说明
--config <path> 指定配置文件(默认 $HOME/.insight-git.yaml)
--repo <name> 目标仓库模式:按名字在配置目录里定位某个仓库
--root <dir> 配合 --repo,限定在某个根目录下查找
--depth <n> 目录扫描深度(默认 2)
-v, --verbose 详细输出
--debug 调试输出

仓库根一览

配置里有几个「我的仓库/资源在哪」的字段,各由不同命令使用。不确定该把路径填进哪个时,对照这张表:

配置字段 谁在用 说明
gitHome status、check commit/push/behind/utd、today、stat、show active 主扫描范围——绝大多数批量命令都扫这里
githubHome check github-backup GitHub 仓库根,只给备份检查用
userScanHome user check / user audit 身份审计的扫描根,与 gitHome 解耦(身份最易出错的目录往往不在日常巡检范围)
repoRootMap 全局 --root 配合 --repo <name> 命名根,用于按名字定位单个仓库
gitlab[] / gitea gitlab、gitea 平台命令 远端平台的 API 配置,不是本地扫描根;⚠️ gitea 相关功能当前可能不可用,后续更新

简单说:日常「哪些仓库忘了提交/推送/落后」填 gitHome;公司/客户项目的身份审计填 userScanHome。


命令参考

多仓库巡检

在 gitHome 配置的所有目录下扫描仓库,逐个检查状态。

命令 作用
insight-git show active 列出近 90 天内有过提交的仓库
insight-git today 统计今天所有仓库的增删行数(汇总表格)
insight-git check commit 列出有未提交改动的仓库
insight-git check push 列出有已提交但未推送提交的仓库
insight-git check utd [--all] fetch 后对比,列出与远端不一致的仓库(--all 检查所有 remote)
insight-git check behind [.] 分支落后检测,详见下一节
insight-git check dirty-lines 当前仓库未提交的行数统计,详见后文
insight-git check github-backup [--add] [--auto] 检查 gitHubHome 里的仓库是否配置了备份 remote;--add 交互式补齐,--auto 免确认

history 是针对单个路径的历史查询,不属于批量巡检,见路径历史 history。

一屏总览 status

把「未提交 / 未推送 / 落后远端」汇成一屏——原本要跑 check commit + check push + check behind 三条命令才看得全,现在一条搞定。

# 扫描 gitHome 下所有仓库,只列出有问题的
insight-git status

# 只看当前目录这一个仓库
insight-git status .

# 连干净的仓库也列出来
insight-git status --all

# 先 fetch 再判断(落后计数更准,但更慢)
insight-git status --fetch

输出示例(每个有问题的仓库一行,干净的折叠成计数):

~/repos/proj-a   ✎ 3 files   ↑2
~/repos/proj-b   ↓5 behind
~/repos/proj-c   ↕ diverged (↑1 ↓2)

42 repos, 39 clean

标记含义:✎ N files 有未提交改动;↑N 领先上游 N 个未推送提交;↓N behind 落后;↕ diverged 分叉;另有 no upstream / detached HEAD / unborn branch / upstream gone。颜色:黄=未提交,青=未推送,红=落后/分叉。

默认离线(读现有 tracking ref,快;落后计数可能是旧的),--fetch 先刷新。无参数扫 gitHome,. 只看当前仓库,--all 连干净仓库一并列出。

全盘普查 census

status 每个仓库一行,回答「这个仓库要不要处理」。census 全盘一份报告,回答「我这块盘整体是什么状况」——多少仓库已经废弃、多少只存在于这一份、多少揣着从未推送的提交、近两年的提交里 AI 署名占多大比例。

# 扫 gitHome 下所有仓库,出一份报告
insight-git census

# 扫指定目录
insight-git census ~/repos

输出示例:

Scanning: ~/repos (depth 2) · 81 repos

  untouched >1y         25   30%
  untouched >2y         20   24%
  only 1 remote         80   98%
  no remote at all       1    1%
  unpushed commits      15   18%
  dirty worktree        13   16%
  AI-attributed        737   42%  of 1728 commits since 2024-07

81 repos · 1 exist only on this disk

no remote at all 标红,因为它是唯一一行代表真的会丢:那些仓库不存在于任何其它地方。其余各行是观察,不是警报。

数字难看的那一行,用 --list 还原成具体仓库:

insight-git census --list no-remote        # 只存在于这块盘上的是哪几个
insight-git census --list unpushed         # 哪些仓库揣着没推的活儿
insight-git census --list ai               # 按 AI 占比从高到低排
~/repos/zdai                53/54        98%
~/repos/aifd                31/32        96%
~/repos/laipeini            13/14        92%
signal 含义 默认排序
stale 一年没有提交 最老优先
stale2y 两年没有提交 最老优先
one-remote 只有一个 remote,没有备份 最老优先
no-remote 一个 remote 都没有 最老优先
unpushed 有本地提交不在任何 remote 上 数量多的优先
dirty 工作区有未提交改动(不含 untracked) 数量多的优先
ai 窗口内有 AI 署名的提交 比例高的优先
参数 说明
--list <signal> 列出某个 signal 背后的仓库;signal 打错会直接报错退出,不会白扫一遍
--sort age|count|ratio 覆盖默认排序
--since-months <n> AI 归因窗口,默认 24 个月
--concurrency <n> 并发扫描数,0 = 16

两处语义值得说明:

  • 未推送用「所有本地分支对所有 remote」判定,而不是「当前分支对它的 upstream」。一个 checkout 在 main、活儿却在没推的 feature 分支上的仓库,后者看不见。完全没有 remote 的仓库,整段历史都算未推送——那是字面意义上的事实。
  • AI 归因读 commit 作者邮箱和 Co-authored-by 尾注。默认只统计近 24 个月,因为跨全部历史会被 agent 尚不存在的年份稀释。尾注的匹配范围比作者邮箱宽,因为一个名叫 Claude 的人不该被算成 AI。需要 git 2.29+ 读尾注;更老的 git 会退化成只按作者邮箱统计,不会报错。

扫描根的优先级:命令行参数 > 配置文件的 gitHome > 当前目录,所以没有配置也能直接用。--depth 默认 2,每加一层会显著变慢(会走进 node_modules 这类目录)。

scripts/git-census.sh 是同一份报告的纯 shell 版本,不需要安装本工具,可以直接粘贴给别人跑。

分支落后检测 check behind

逐个本地分支,判断它相对其配置的上游远端分支处于什么状态。默认先 fetch 再判断(准确优先),只看当前分支。

# 扫描 gitHome 下所有仓库的当前分支
insight-git check behind

# 只看当前目录的仓库,且展示全部分支
insight-git check behind .

# 看所有仓库的所有本地分支
insight-git check behind --all

# 跳过 fetch,直接用现有的 tracking ref 比较(快,但可能是旧数据)
insight-git check behind --offline

# 脚本友好:只要有任何分支落后或分叉,就以非零码退出
insight-git check behind --exit-code

八种状态:

状态 含义
up-to-date 与上游完全一致
behind N 落后上游 N 个提交
ahead N 领先上游 N 个提交
diverged 与上游分叉(既有领先又有落后)
no-upstream 该分支没有配置上游
gone 配置了上游,但上游 ref 已经不存在(远端被删)
detached HEAD 处于游离状态(仅当前分支路径)
unborn HEAD 指向一个还没有任何提交的分支

输出带颜色区分:绿色=最新,黄色=落后,青色=领先,红色=分叉/已删除,灰色=无上游/游离/未初始化。

选项:

选项 说明
--all 检查所有本地分支,而不只是当前分支
--offline 跳过 fetch,用现有 tracking ref 比较
--prune fetch 时顺带 prune,让 gone 判断更准确(会改动本地 ref)
--exit-code git 风格:有分支落后或分叉时以退出码 1 结束
--concurrency <n> 批量模式下的最大并发仓库数(0 = 默认 16)

未提交行数统计 check dirty-lines

报告当前目录所在仓库相对 HEAD 有多少行还没提交(暂存 + 未暂存一起算),等价于 git diff --shortstat 的汇总。

insight-git check dirty-lines
# 3 files changed, 128 insertions(+), 12 deletions(-)

未跟踪文件不计入(git diff 本就不含它们);仓库若还没有任何提交,则统计已暂存的内容。该命令只针对当前仓库,不做批量扫描。

路径历史 history

回答:这个文件/目录是什么时候第一次被提交的、最后一次被修改是什么时候。

# 单个文件
insight-git history pkg/git_client/open.go

# 一次查多个,文件和目录混着来
insight-git history pkg/git_client/open.go pkg/gitlab_api cmd/root.go

输出示例:

pkg/git_client/open.go  (followed 2 renames)
  first  a2aebdc  2024-07-08 20:40  xunull  update-20240708_204053
  last   cd8db3c  2024-10-05 20:50  xunull  update-20241005_205028
  span   89 days

几处语义需要留意:

  • last 指最后一次「修改」它的 commit,不是「最后一个包含它的 commit」——后者对任何还存在的文件永远等于 HEAD,没有信息量。对已删除的路径,last 就是删掉它的那次提交。
  • 文件默认跨重命名追溯。上例里 open.go 搬过两次家,默认给出内容真正诞生的 2024-07-08;若只想知道「当前这个路径何时出现」,加 --no-follow(会得到 2024-10-05)。
  • 目录不跟随重命名,这是 git 的限制(--follow 只支持单个文件),输出会标注 (directory; renames not followed)。对目录显式传 --follow 会直接报错,而不是像原生 git 那样静默给出无意义结果。详见 ADR-0001。
  • 时间取 author date,不是 committer date——rebase / cherry-pick 会改写后者。
  • 仓库从路径自身向上定位,所以绝对路径指向另一个仓库也能查。

选项:

选项 说明
--no-follow 不跟随重命名,报告当前路径第一次出现的时间
--follow 显式要求跟随(文件的默认行为);打在目录上会报错
--all 搜索所有 ref,而不只是 HEAD 可达的历史

退出码:0 全部找到;1 有路径在历史中不存在;2 有路径无法读取(不在 git 仓库内、对目录用了 --follow 等)。

Git 身份管理 user

大部分仓库用全局的 user.name / user.email 就够了,但公司项目、客户项目往往需要单独的身份。在配置文件的 gitUsers 里预定义好身份,然后一条命令套用。

insight-git user list          # 列出配置里定义的所有身份
insight-git user show          # 当前仓库在用谁提交,并标明来自 local 还是 global
insight-git user set work      # 给当前仓库写入 work 这个身份(--local)
insight-git user check         # 配置视图:扫描根下各仓库分别配置成谁提交
insight-git user audit         # 历史视图:扫历史,揪出跑错仓库的身份(零配置)

user set 的输出:

proj-b
  user.name   oldme -> zhangsan
  user.email  old@qq.com -> zhangsan@acme.com

⚠ 5 commit(s) in this repo already use old@qq.com
  the new identity applies to future commits only; history is unchanged

它只写 --local(即 .git/config),不碰全局配置。已有的 local 身份会被直接覆盖,改动逐行打印所以一眼可见。最后那段警告命中的是这个功能真正的痛点——你往往是提交完才发现身份用错了。

user check 的输出:

work  zhangsan <zhangsan@acme.com>  [local]  4 repos
  work/acme/api-service
  work/acme/web-portal

xunull <xunull@163.com>  [global]  134 repos

⚠ unregistered identity  oldme <old@qq.com>  [local]  1 repos
  work/legacy/crm

140 repos scanned, 1 using an unregistered identity

按身份分组,大群体只给一行数字,少数派逐个列出(--verbose 可展开全部)。只有「自己设了 local 身份、但那个邮箱不在 gitUsers 里」才会被标红——单纯继承全局身份的仓库不算异常,否则你绝大多数仓库都会变成警告。

user audit——扫描历史,揪出跑错仓库的身份:

check 看的是仓库配置成谁提交(影响未来的提交);audit 看的是历史里实际是谁提交的。它回答那个更尴尬的问题——「我是不是拿公司邮箱提交了开源仓库?」——而且零配置就能跑:

cd ~/projects && insight-git user audit   # 无需任何配置,回退扫当前目录
insight-git user audit ~/work             # 指定路径
insight-git user audit                    # 配了 userScanHome/gitHome 就扫它们

它对每个仓库读历史作者(取 author、不是 committer),标出三种「值得看」的信号:

  • drift —— 仓库显式设了 local 身份,但历史里从没用它提交过(通常是你改了 config、却没改历史)。只认 local:单纯继承全局身份的仓库(比如 clone 来没提交过的)不算。
  • mixing —— 一个仓库历史里出现了你两个身份。owned identity(「你」)= 在 ≥2 个扫描仓库当过作者的邮箱,只出现一次的视为路过的协作者、排除,所以团队仓库不会因人多而误报。
  • foreign —— 配置了 gitUsers 时,历史作者里出现任何已声明身份都不认识的邮箱(陌生人,或你不再声明的旧邮箱);没配 gitUsers 则不触发。

输出证据优先、只摆事实不下判决,干净仓库折叠成计数:

Scanning: ~/projects (depth 2)
Owned identities: me@personal.com, me@work.com

⚠ mixing  oss/some-lib
    configured: Me <me@personal.com>
    authored:   Me <me@personal.com>  118
                Me <me@work.com>  4  ← also yours

⚠ drift  oss/another
    configured: Me <me@personal.com>
    authored:   Me <me@work.com>  52
    (configured identity never authored here)

42 scanned · 2 notable · 40 clean

检测模型与取舍(为何 drift 只认 local、owned 为何用跨仓库频次)见 ADR-0003。

选项(user audit):

选项 说明
--exit-code 有 notable 仓库时以退出码 1 结束(给 CI)
--concurrency <n> 最大并发扫描仓库数(0 = 默认 16)

几点说明:

  • 身份只含 git 的 user.* 命名空间:name、email、可选 signingkey。按仓库切 SSH 私钥(core.sshCommand)、切代理等不在范围内——那是配置管理,不是身份。理由见 ADR-0002;这类需求用 git 原生的 includeIf "gitdir:…" 更合适,两者可以并用。
  • 切换到没有 signingKey 的身份时,会主动清掉仓库里残留的 user.signingkey,免得旧密钥继续给新身份签名。
  • 配置里 alias 重复会在加载时直接报错,而不是悄悄取第一个。
  • set 与 show 默认作用于当前目录,也接受全局参数 --repo <name> 指定仓库。
  • 审计的扫描根用 userScanHome,与 gitHome 解耦:身份最容易出错的往往正是日常巡检不覆盖的那些目录。也可以直接传路径:insight-git user check ~/some/dir。

选项(user check):

选项 说明
--exit-code 有仓库使用未登记身份时以退出码 1 结束
--verbose 列出每一个仓库,包括大分组
--concurrency <n> 最大并发扫描仓库数(0 = 默认 16)

代码量统计

统计 gitHome 下所有仓库的代码增删行数。日期格式为 YYYYMMDD。

命令 作用
insight-git stat <day1> <day2> 统计两个日期之间的总增删行数
insight-git stat daily <day1> <day2> 逐日统计,支持 --table / --ui / --web 三种展示

公共选项:--ext <后缀> 按文件后缀过滤,--ext-type <front|end> 按前/后端类别过滤。

Git 快捷操作

作用于当前目录的仓库。

命令 作用
insight-git ac [message] git add . + git commit(等价于 git ac)
insight-git acp [message] git add . + git commit + git push(等价于 git acp)
insight-git tree [--depth n] [--v1] [--out-type ...] 展示当前仓库的目录树
insight-git ls remote 列出当前目录范围内(含当前目录及直接子目录)各仓库的 remote

代码阅读追踪

记录一个仓库里哪些源码文件已经读过。

命令 作用
insight-git readcode stat 展示已读/未读文件统计
insight-git readcode unread 列出还没标记为已读的文件
insight-git readthis [--remote name] 把当前仓库标记为「已读」(向指定 remote 推送引用)

readcode 公共选项:--ext <后缀>、--lang <语言>、--exclude-dir <目录>(可多次)。

insight-git readcode stat --lang Golang
insight-git readcode unread --lang Golang

Go 项目分析

命令 作用
insight-git golang stru [dirs...] 输出指定目录的 Go 项目结构统计
insight-git golang find mod <module> 反查哪些仓库依赖了某个 Go module
insight-git golang find pkg <package> 反查哪些仓库 import 了某个 Go package

仓库索引

把目录树里所有 Git 仓库的元信息采集进 SQLite,便于后续查询和排序。默认数据库路径 ~/.xunull-local/insight-git/data.db。

命令 作用
insight-git index repo [起始路径] 扫描目录树,索引所有 Git 仓库(不传路径默认当前目录)
insight-git index filter [--path 前缀] [--sort 列] 查询已索引的仓库,支持路径前缀过滤和排序

index repo 选项:--db、--max-depth、--pool-size、--scan-pool-size、--dir-threshold、--exclude(可多次)。

远程与平台

命令 作用
insight-git remote add [gitlab-name] 为当前仓库自动配置 GitLab remote(不传名字时用唯一的 gitlab 配置)
insight-git backup push 把所有仓库推送到各自配置的备份 remote
insight-git sync --src-type gitlab --dst-type local --src-name <名> --dst-name <本地路径> 把 GitLab 上的仓库批量克隆(裸仓库)同步到本地

其它

命令 作用
insight-git git_hook pre-commit --check-large 作为 git pre-commit hook 调用,检测过大的文件
insight-git version 打印版本号与构建时的 commit hash

以下命令目前是占位/实验状态,尚未完整实现:stat month、backup add、gitlab mirror add。gitea 相关功能(除 GitHub→Gitea 备份外)当前可能不可用,后续会更新。


平台目录结构约定

不同 Git 平台的命名空间层级不同,insight-git 在路径解析时按这个约定处理:

  • GitHub —— 两层结构(owner/repo)
  • Gitea —— 两层结构(owner/repo)
  • GitLab —— 多层结构(group/subgroup/.../repo)

从源码构建

# 构建到 ./bin/
make build

# 安装到 $GOPATH/bin
make install

# 运行测试
go test ./...
go vet ./...

项目采用标准的 cobra CLI 结构:

  • cmd/ —— 所有 CLI 命令定义
  • pkg/insightx/ —— 多仓库巡检、统计、扫描的核心逻辑
  • pkg/git_status/ —— 仓库当前状态内核(check behind、check dirty-lines、status 总览)
  • pkg/git_history/ —— 路径历史内核(history)
  • pkg/git_user/ —— git 身份管理与审计内核(user)
  • pkg/git_client/ —— 基于 go-git 的仓库访问层
  • pkg/gitlab_api/ pkg/gitlab_assist/ —— 平台 API 与业务封装
  • pkg/provider/ —— 面向多服务商的统一接口抽象
  • git_repo_index/ —— 仓库索引(SQLite)
  • internal/ —— 配置与全局状态

贡献

欢迎贡献。构建、测试、代码风格与 PR 约定见 CONTRIBUTING.md。


许可证

本项目基于 Apache License 2.0 开源。

About

Batch insight across many git repos: status, path history, zero-config identity audit 批量洞察多个 git 仓库:状态、路径历史、零配置身份审计

Topics

Resources

Contributing

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages