Git/GitHub 不能推到 master

我是 Git/GitHub 的新手,遇到了一个问题。我创建了一个测试项目,并将其添加到本地存储库中。现在我尝试将文件/项目添加到远程存储库。

以下是我所做的(并且成功了)

git remote add origin git://github.com/my_user_name/my_repo.git

现在,当我尝试使用以下命令将存储库推送到 GitHub 时,会得到以下错误-

git push origin master

错误-

fatal: remote error:
You can't push to git://github.com/my_user_name/my_repo.git
Use git@github.com:my_user_name/my_repo.git
145890 次浏览

如果转到 http://github.com/my_user_name/my_repo,您将看到一个文本框,您可以在其中选择到存储库的 git 路径。你会想用这个的!

GitHub 不支持推送 Git 协议,使用以 git://开头的 URL 表明了这一点。正如错误消息所说的,如果您想要推送,您应该使用 SSH URL git@github.com:my_user_name/my_repo.git或者通过使用 GitHub 为您的存储库显示的 https:// URL 来使用“智能 HTTP”协议。

(更新: 令我惊讶的是,一些人显然认为我这样说是在暗示“ https”意味着“智能 HTTP”,而我不是。Git 过去有一个“哑 HTTP”协议,在引入 GitHub 使用的“智能 HTTP”之前,它不允许进行推送——要么可以在 httphttps上使用。Git 使用的传输协议之间的差异在下面的链接中解释。)

如果你想更改网址,你可以这样做:

git remote set-url origin git@github.com:my_user_name/my_repo.git

或者

git remote set-url origin https://github.com/my_user_name/my_repo.git

更多信息可在 10.6 Git 内部传输协议中获得。

Mark Longair 使用 git remote set-url...的解决方案非常清楚。控件的此部分也可以获得相同的行为。Git/config 文件:

以前:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git://github.com/my_user_name/my_repo.git

之后:

[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = git@github.com:my_user_name/my_repo.git

(相反,git remote set-url...调用会产生上述更改。)

对于新手来说,有一个简单的解决办法:

编辑本地. git 目录(config)中的配置文件。

[remote "origin"]
url = https://github.com/your_username/your_repo

使用 Mark Longair 的回答,但要确保使用到存储库的 HTTPS 链接:

git remote set-url origin https://github.com/my_user_name/my_repo.git

然后可以使用 git push origin master

我有这个问题 在升级 Git 客户端之后,突然我的存储库不能推。

我发现一些旧的遥控器有错误的 url值,即使通过我当前活动的遥控器有相同的 url值,并且工作正常。

但也有 pushurl参数,所以为旧遥控器添加它对我来说很有用:

以前:

[remote "origin"]
url = git://github.com/user/repo.git
fetch = +refs/heads/*:refs/remotes/origin/*
pushurl = git@github.com:user/repo.git

注意: 这部分文件“ config”已经很长时间没有使用了,但是新客户端抱怨错误的 URL:

[remote "composer"]
url = git://github.com/user/repo.git
fetch = +refs/heads/*:refs/remotes/composer/*

所以我把 pushurl参数加到了旧的遥控器上:

[remote "composer"]
url = git://github.com/user/repo.git
fetch = +refs/heads/*:refs/remotes/composer/*
pushurl = git@github.com:user/repo.git

你克服它的最快方法是用它给出的建议来代替 origin

使用:

git push git@github.com:my_user_name/my_repo.git master

我在 github.com 上添加了我的 pubkey,这个功能很成功:

ssh -T git@github.com

但我在错误地做了这件事之后,收到了“你不能推”的错误信息:

git clone git://github.com/mygithubacct/dotfiles.git
git remote add origin git@github.com:mygithubacct/dotfiles.git
...edit/add/commit
git push origin master

而不是做我应该做的:

mkdir dotfiles
cd dotfiles
git init
git remote add origin git@github.com:mygithubacct/dotfiles.git
git pull origin master
...edit/add/commit
git push origin master

当您使用如下调用克隆一个回购时,就会发生此错误:

git clone git://github.com/....git

这实际上将您设置为只能拉动的用户,不能推动更改。

我通过打开我的回购的 .git/config文件并改变行来修正这个问题:

[remote "origin"]
url = git://github.com/myusername/myrepo.git

致:

[remote "origin"]
url = ssh+git://git@github.com/myusername/myrepo.git

带有 git用户的 ssh+git协议是 Github 首选的身份验证机制。

这里提到的其他答案在技术上是可行的,但它们似乎都绕过了 ssh,需要手动输入密码,这可能是您不想要的。

全局设置 https而不是 git://:

git config --global url.https://github.com/.insteadOf git://github.com/

下面的 cmnds 将修复这个问题。

 git pull --rebase
git push