显式提交作者规则(commit authorship rule)

适用:kailash 仓库全部工作树 / 全部分支。强制。

一、为什么要有这条

本仓库是多工作树共享同一 .git,且本地 user.name / user.email 是「谁最后提交就是谁」。

实测事故:波波在共享 worktree 提交时,本地 config 当时是小冈,导致波波的代码被署成小冈;

而 pre-receive 校验 author ↔ 推送账号,波波用 bobo 账号推送含小冈署名的分支 → 被拒。

根因不是谁写错了,是「依赖本地 config 的 user.*」在共享 worktree 下必然串味。

二、规则(强制)

  1. 每一次提交都必须显式声明 --author,与你的推送账号一致。 禁止依赖本地 config 的 user.*。
  2. 推送账号与 author email 必须匹配,否则 pre-receive 拦截。
  3. -c user.name=... 在本机不稳(中文名在工具 shell 引号里会被吞),一律用 git commit --author="姓名 <邮箱>"。

三、命令模板(直接抄)

# 普通提交
git commit --author="波波 <bobo@kailash.media>" -m "feat: ..."

# 改最近一笔的署名
git commit --amend --author="波波 <bobo@kailash.media>" --no-edit

# 批量把分支基线之后的提交重置为某人(rebase 场景,慎用)
# 注意:--reset-author 会用「当前 config」的身份,多人共享 worktree 下可能再次串味,
# 优先逐笔 --author,或 rebase 后逐笔 amend。
GIT_SEQUENCE_EDITOR=: git rebase <base> --exec 'git commit --amend --no-edit --reset-author'

四、账号映射(author email = 推送账号)

成员author推送通道
波波波波 <bobo@kailash.media>https://bobo@doc.kailashi.cn/git/kailash.git
小冈小冈 <xiaogang@kailash.media>xiaogang 通道(xiaogang@doc.kailashi.cn)
小齐小齐 <xiaoqi@kailash.media>xiaoqi 通道(历史也用过 @kailashi.cn / @kailashi.media)
冈子冈子 <gangzi@kailash.media>gangzi 通道
阿仁阿仁 <aren@kailash.media>aren 通道(历史也用过 @kailashi.cn)
提交前确认 --author 与你要用的推送 URL 账号一致。各人账号以实际为准,发现串味立即 --amend --author 修正。

五、推送前自查

git log --format='%h %an <%ae> %s' -3

author 必须是本人;若发现串味,先 amend 改回再推。

六、根治(将来)

每人独立 worktree + 独立分支,本地 config 各自设好,从根上消除共享 config 串味。

当前阶段(v3 提审前、尚未分工)先靠本规则守。