我在GitHub上创建了另一个存储库(让我们称之为myrepo
)的fork(让我们称之为orirepo
)。后来,我克隆了orirepo
。
git clone https://github.com/original/orirepo.git
我修改了大约20个文件,然后我上演了我的更改并进行了提交
git add
git commit
然而,当我试图推
时git push
我收到了这个错误:
remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403
我知道我犯了一个错误:我应该克隆我的叉而不是orirepo
,但现在已经太迟了。
我怎么能推到我的叉子而不是origin/orirepo
,我没有写入权限?
答案 0 :(得分:150)
默认情况下,克隆存储库时
https://github.com/original/orirepo.git
,master
,然后
origin
的远程,它与您克隆的存储库的URL相关联; master
分支设置为 track origin/master
。因此,如果您不修改克隆的配置,Git会解释
git push
作为
git push origin master:origin/master
换句话说,git push
会尝试将您的本地master
分支推送到驻留在远程存储库上的master
分支(您的克隆称为origin
)。但是,您不允许这样做,因为您没有对该远程存储库的写访问权。
你需要
通过运行
重新定义与您的分机相关联的origin
遥控器
git remote set-url origin https://github.com/RemiB/myrepo.git
或者,如果要保留origin
遥控器的原始定义,请定义与您的分支相关联的新遥控器(此处称为myrepo
):
git remote add myrepo https://github.com/RemiB/myrepo.git
然后,您应该能够通过运行
将本地master
分支推送到您的分支
git push myrepo master
如果你想告诉Git从现在开始git push
应该推送到myrepo
而不是origin
,你应该运行
git push -u myrepo master
代替。
答案 1 :(得分:13)
所以,你克隆了某人的回购做出了改变,然后意识到你不能推到那个回购,但你可以推到自己的分支。所以,你继续前进并分叉原始回购。
您所要做的就是将本地克隆中的原始URL与分叉回购的URL交换。
这样做
git remote set-url origin https://github.com/fork/name.git
其中https://github.com/fork/name.git
是原始仓库中前叉的URL。
之后,只需
git push
您将能够将更改推送到您的分支:)
答案 2 :(得分:7)
好的,我终于编辑了我的git配置文件:
$ nano .git/config
改变:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://github.com/<origin-project>/<origin-repo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
到
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = https://github.com/<mylogin>/<myrepo>.git
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
然后,
$ git push
像魅力一样工作。
或者,感谢Thiago F Macedo answer:
git remote set-url origin https://yourusername@github.com/user/repo.git
答案 3 :(得分:1)
如果您使用 SSH 进行身份验证(而不是通过 HTTPS),那么您可以将本地克隆中的源 URL 与分叉存储库的 URL 交换,如下所示:
git remote set-url origin git@github.com:username/repository
那么简单:
git push
答案 4 :(得分:-4)
您应首先在帐户中克隆分叉回购。
git clone https://github.com/your_account/repo.git
您绝对有权推送此回购。如果您想将代码推送到原始仓库,可以发出拉取请求。