我可以在某些代码上成功运行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上的错误。
答案 0 :(得分:5)
--msg-filter
将在何处执行,原始提交ID位于环境变量$GIT_COMMIT
中,因此(未经测试)使消息过滤器简单:cat; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]"
。