9

我可以成功运行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 上有没有被转移的评论/对话。

例如添加这样的额外行(bob/helpers预先硬编码/已知的位置):

[COPIED FROM bob/helpers@76c7c080b3bd2f93dc78e4864899d668a57cd9f9]

据我所知,Gitmsg-filter只给了我原始消息,而 Gitenv-filter不包含提交 ID(SHA 有)作为输入变量。那么这可能吗?

谢谢!

[1] 通过这篇很棒的文章,使用此电子邮件线程中的 Perl 过滤器来解决 Mac OS X 上的错误。

4

1 回答 1

5

--msg-filter将在哪里进行,并且原始提交 ID 在 environment variable$GIT_COMMIT中,因此(未经测试)简单地制作消息过滤器:cat; echo "[COPIED FROM bob/helpers@$GIT_COMMIT]".

于 2012-04-20T17:45:37.777 回答