我可以成功地在一些代码上运行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 上的错误。