在为我的一个旧项目挖掘出一个Git仓库并将其克隆到我现在的机器上之后,我试图将其加载到我的Git GUI中失败了。错误表明该项目上有太多的贡献者,因为我是一个使用业余爱好许可证的业余爱好者。这是一个私人项目,所以我实际上是唯一的用户,许可证是完全合适的,但git log | grep Author: | sort -u
显示,我似乎已经使用了大约六个电子邮件地址多年来。推测这就是导致封锁。
我在网上找到一篇文章,指出用户可以使用以下方法进行追溯更改:
$ git filter-branch --env-filter '
OLD_EMAIL="[email protected]"
NEW_NAME="New Name"
NEW_EMAIL="[email protected]"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_COMMITTER_NAME="$NEW_NAME"
export GIT_COMMITTER_EMAIL="$NEW_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
export GIT_AUTHOR_NAME="$NEW_NAME"
export GIT_AUTHOR_EMAIL="$NEW_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
字符串
这 * 似乎 * 作出的变化,但我仍然得到同样的错误时,试图加载到GUI的存储库,所以我猜它是不完整的。
是否有某种核心选项可以强制Git完全更改对同一用户的所有提交?没有关于重写历史的担忧,因为从来没有其他用户。
[edit]这里提到的GUI客户端是SmartGit,它现在有一个业余爱好使用的许可证。它可以在任何只有一个提交者/作者的仓库上使用。
1条答案
按热度按时间ndasle7k1#
看起来GUI会检测到未被修改的refs(如
refs/remotes/origin/foo
)上的旧提交,并拒绝加载。因此,其中一个想法是从当前的本地repo中创建一个新的克隆,并使其仅包含更新的分支和标签。字符串
如果有一个真实的远程仓库,请确保在
git fetch
或git pull
之前运行git push -f
来更新远程仓库中的分支/标签。否则,一旦旧的提交被提取到新的本地仓库中,GUI就会抱怨。