Git filter-branch:可以更新提交消息以引用旧的提交 ID



我可以在某些代码上成功运行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] 通过这篇很棒的文章,使用此电子邮件线程中的 Perl 过滤器来解决 Mac OS X 上的错误。

--msg-filter将是

在哪里执行此操作,并且原始提交ID位于环境变量$GIT_COMMIT中,因此(未经测试)使消息过滤器简单地:cat; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]"

最新更新