3

我有一个类似于问题中描述的问题如何更改 git 中提交的作者?我正在尝试的解决方案正在使用git filter-branch,但它不起作用,因为它不会将字符串文字与空格匹配,即我需要contains

git filter-branch --commit-filter '
    if [ "$GIT_AUTHOR_NAME" = "giovanni azua" ];
    then
            GIT_COMMITTER_NAME="Giovanni Azua";
            GIT_COMMITTER_EMAIL="giovanni.azua@xxx.com";
            GIT_AUTHOR_NAME="Giovanni Azua";
            GIT_AUTHOR_EMAIL="giovanni.azua@xxx.com";
            git commit-tree "$@";
    else
            git commit-tree "$@";
    fi' HEAD

如果中间有空格,等号将不起作用,我不知道如何转义它。我也尝试过像逃避它一样giovanni\ azua但不起作用。我也找不到任何关于这个脚本的参考,即你如何做字符串containssubstring匹配?我总是得到输出WARNING: Ref 'refs/heads/master' is unchanged

更新:它还会检查我的框是否有if [ "$GIT_AUTHOR_NAME" ~= "giovanni azua" ];但操作员~=不起作用。

4

1 回答 1

2

使用的脚本git filter-branch只是 的一个片段sh,这意味着您可以使用 的所有功能sh以及您可以从中调用的任何命令(echogrepsed等)。要实现通配符匹配,您不需要调用外部命令,因为sh它提供了有点笨拙但有用的case命令。在您的情况下(没有双关语),它可能如下所示:

git filter-branch --commit-filter '
    case "$GIT_AUTHOR_NAME" in
      *[Gg]iovanni*[Aa]zua*)
          GIT_COMMITTER_NAME="Giovanni Azua"
          GIT_COMMITTER_EMAIL="giovanni.azua@xxx.com"
          GIT_AUTHOR_NAME="Giovanni Azua"
          GIT_AUTHOR_EMAIL="giovanni.azua@xxx.com"
          git commit-tree "$@"
          ;;
      *)
          git commit-tree "$@"
          ;;
      esac
' HEAD

以上将更改作者姓名中任何地方的作者姓名包含giovanniorGiovanniazuaor Azua(按此顺序)的所有提交。

于 2013-09-21T21:44:27.790 回答