gpt4 book ai didi

git - 使用 `git filter-branch` 时是否有更好的匹配方法?

转载 作者:太空狗 更新时间:2023-10-29 14:14:07 26 4
gpt4 key购买 nike

我遇到的问题类似于问题 How do I change the author of a commit in 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"]; 但运算符 ~= 没有工作。

最佳答案

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

以上将更改作者姓名包含 giovanniGiovanniazuaAzua 的所有提交(在该顺序)在作者姓名的任何位置。

关于git - 使用 `git filter-branch` 时是否有更好的匹配方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18922275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com