【发布时间】:2013-10-14 02:54:53
【问题描述】:
我想创建一个 git 脚本,在指定的提交范围 (abcd..dcba) 中将作者“A”替换为作者“B”。我怎样才能做到这一点? 这是我目前所拥有的:
#!/bin/sh
#
# git-myCommand
#
#
git filter-branch --commit-filter '
if [ git rev-list --boundary 02e60c8..dc4c65f ]; then
if [ "$GIT_AUTHOR_NAME" = "A" ];then
GIT_AUTHOR_NAME="B";
fi;
fi;
git commit-tree "$@"'
问题是 git 说
Rewrite $SHA1-Number git commit-tree: line 48: [: too many arguments
git rev-list --boundary 命令在 if 语句中是否合法? 如果我删除 if [git rev-list ... ] 语句,它将起作用。
如果我可以添加输入变量,那将是理想的。 所以命令看起来像
git myCommand $AuthorExpression $AuthorReplace $CommitA..$CommitB
编辑:有些人认为这个问题已经被问过了。对于那些请再次阅读上面的问题并将其与之前提出的问题进行比较。 AFAIK 这个问题(测试提交是否在提交 A 和提交 B 之间)尚未被询问。如果我错了,很抱歉浪费你的时间。感谢那些试图回答这个问题的人!
【问题讨论】:
-
我不认为
if [ git rev-list ... ]是对的。你期望它做什么?也许应该是if [ $(git rev-list ...) ]或者只是if git rev-list ...... -
@twalberg 哦。只需删除
git rev-list行中的括号即可。 -
仅删除括号无济于事:
git rev-list如果具有有效参数,则退出零(成功),无论正在重写什么 rev。 -
抱歉,第一次回答时错过了
git rev-list的问题。更新了我的答案以解决该问题。您不想在提交过滤器中进行rev-list测试;只需直接在git filter-branch命令中限制您要重写的版本即可。 -
这不是重复的。这个问题只是问如何重写作者;这个问题询问如何将这种重写应用于有限的提交范围。请大家不要在不考虑假设的重复项是否实际上在问完全相同的问题的情况下投票关闭。