我可以在某些代码上成功运行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]"
。