我可以在某些代码上成功运行 git filter-branch
将另一个 repo merge 到子目录 [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 上的错误。
最佳答案
--msg-filter
将在哪里执行,原始提交 ID 在环境变量 $GIT_COMMIT
中,因此(未经测试)进行消息过滤器简单地:猫; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]"
.
关于Git 过滤分支 : possible to update commit messages to reference old commit IDs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248922/