Git filter-branch: 是否可以更新提交信息以引用旧的提交ID?

9

我可以成功地在一些代码上运行git filter-branch,例如将另一个仓库合并到子目录中[1]:

git filter-branch --index-filter '
  git ls-files -s |
  perl -pe "s{\t\"?}{$&helper/}" |
    GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
  mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' remotes/helper/master

现在,我还想扩展每个提交的消息,以包括其先前的ID(SHA哈希),因为这些提交可能在GitHub上有评论/对话,这些评论/对话不会被转移过来。例如,添加一行额外的代码(其中 bob/helpers 是预先硬编码/已知的)。
[COPIED FROM bob/helpers@76c7c080b3bd2f93dc78e4864899d668a57cd9f9]

据我所知,Git 的 msg-filter 只会给出原始消息,而 Git 的 env-filter 并没有将提交 ID(SHA 值)作为输入变量。那么这种操作可能吗?还是不可能呢?
谢谢!
[1] 参考 this great article,使用来自 this email thread 的 Perl 过滤器绕过 Mac OS X 上的错误。
1个回答

5

--msg-filter 是进行此操作的地方,原始提交 ID 存储在环境变量 $GIT_COMMIT 中,因此(未经测试)可以将消息过滤器简单设置为:cat; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]"


工作得非常好!我不知道环境变量在那里。谢谢! - Aseem Kishore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接