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

时间:2012-04-20 15:17:04

标签: git

我可以在某些代码上成功运行git filter-branch例如将另一个repo合并到一个子目录[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上有未经转移的评论/对话。

E.g。添加一个这样的额外行(其中bob/helpers预先硬编码/已知):

[COPIED FROM bob/helpers@76c7c080b3bd2f93dc78e4864899d668a57cd9f9]

据我所知,Git的msg-filter只给我原始消息,而Git的env-filter不包含提交ID(SHA has)作为输入变量。这可能,或者不是吗?

谢谢!

[1]通过this great article,使用this email thread中的Perl过滤器解决Mac OS X上的错误。

1 个答案:

答案 0 :(得分:5)

--msg-filter将在何处执行,原始提交ID位于环境变量$GIT_COMMIT中,因此(未经测试)使消息过滤器简单:cat; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]"