如何配置git从http中提取并在一个'remote'中推送ssh?

时间:2010-08-24 02:59:14

标签: git authentication git-push git-pull

从http拉到转义验证(如果我没有使用ssh.keygen,我不需要输入密码)。

通过身份验证推送ssh。

2 个答案:

答案 0 :(得分:18)

来自git-config man page

  

remote.<name>.url遥控器的网址   库。请参阅git-fetch(1)或   GIT-推(1)。

     

remote.<name>.pushurl推送网址   一个远程存储库。见git-push(1)。

尝试将前者设置为http:网址,将后者设置为git+ssh:(或仅git:)网址?

答案 1 :(得分:10)

原始答案,用于在一个“远程”中通过ssh推送:这仅适用于一个回购,当前回购:

如果您有一个git remote -v会返回“ origin”的https URL,则可以键入:

git config remote.origin.pushurl git@github.com:aUser/aRepo

或更确切地说:

git remote set-url --push git@github.com:aUSer/aRepo

noted here

  

它在功能上没有什么不同,因为set-url在内部最终只是调用config。但是,如果您键入错误的命令部分“ set-url”,git remote set-url --push将会抱怨,而git config会默默接受错误键入的选项,但实际上无法设置远程URL。

请参见 git-reference (已改编):

$ git remote -v
origin  https://github.com/schacon/git-reference.git (fetch)
origin  https://github.com/schacon/git-reference.git (push)

$ git remote set-url --push origin git@github.com:schacon/git-reference.git

$ git remote -v
origin  https://github.com/schacon/git-reference.git (fetch)
origin  git@github.com:schacon/git-reference.git (push)

在赏金的背景下,jww添加:

  

我希望这适用于所有github.com,而不仅仅是我的存储库

然后git remote不是答案。

只有url.<base>.pushInsteadOf适用于所有仓库:

  

任何以该值开头的URL都不会被推送;而是将其重写为以开头,并将结果URL推送到。我

所以:

 git config --global url."git@github.com:".pushInsteadOf https://github.com/
 # or
 git config --global url."ssh://git@github.com/".pushInsteadOf https://github.com/

我在2014年的“ Git: how to get the public, read-only git:// URL”中提到了该选项。

--global选项将使它应用于所有 all 仓库,而不仅仅是当前仓库。