我试图在GitHub上分享一个项目,并希望在GitHub上使用IntelliJ IDEA的内置" Share项目"选项。当我点击它时,我被要求登录我成功完成的GitHub,然后选择我想要提交的文件,以便将它们推送到存储库。
问题是,虽然这确实在GitHub上创建了一个空的存储库,但它并没有推送初始提交,而是向我抛出错误:
Successfully created project 'project' on GitHub, but initial push failed: unable to access 'https://github.com/alt/project.git/': The requested URL returned error: 403
我知道这样做的原因是因为我设置了git来使用我的主帐户,并且我试图推送到我的alt帐户上的存储库。我出于自己的原因设置了一个alt账号。在此失败后,我尝试使用git bash;我为alt帐户生成了一个新的ssh密钥对,并将其添加到GitHub上alt帐户的SSH密钥中。我还在~/.ssh/
文件夹中创建了一个配置:
#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#Alt GitHub
Host github-alt
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_alt
并将user.email和user.name设置为我的alt帐户的电子邮件和名称。完成所有这些后,我尝试添加一个新的遥控器并使用git bash推送它:
git remote add origin git@github-alt:alt/project.git
git push -u origin master
实际上将提交推送到存储库...作为我的主帐户,不我的 alt帐户。
我在这里做错了什么?我想在我的 alt 帐户上共享GitHub上的项目,并使用相同的 alt 帐户推送到它。
答案 0 :(得分:2)
命令git remote add origin git@github-alt:alt/project.git && git push -u origin master
将代码推送到与 alt 帐户关联的存储库。
但这不会修改现有提交的作者。到目前为止提交的提交已关联主用户名。在整个提交历史记录中更改用户名需要git history rewrite。在执行此操作之前,请确保您已备份存储库。
示例脚本:
#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="main@sample.com"
NEW_NAME="alt"
NEW_EMAIL="alt@sample.com"
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
在验证git历史记录后执行强制推送。 git push --force --tags origin 'refs/heads/*'