新しいリポジトリのgitをhttpsではなくsshにデフォルト設定するにはどうすればよいですか


206

最近、セットアップページのGitHubに新しいリポジトリを作成すると、次のようになります。

git remote add origin https://github.com/nikhilbhardwaj/abc.git
git push -u origin master

コミットをプッシュする必要があるときはいつでも、GitHubのユーザー名とパスワードを入力する必要があります。

手動で変更できます

git@github.com:nikhilbhardwaj/abc.git

の中で.git/config。これはかなりイライラします- デフォルトでSSHを使用するようにgitを設定する方法はありますか?


@MoOxの答えはおそらくあなたが探しているものと最も一致していると思います。insteadOfトリックはまた、少なくとも2012年以来の周り見てきました変換するために、どのようgit:にURLをhttp:URLに
jww 2017年

回答:


300

リポジトリのオリジンブランチをSSHに設定する

GitHubリポジトリのセットアップページは、コマンドの推奨リストにすぎません(GitHubはHTTPSプロトコルの使用を提案しています)。GitHubのサイトへの管理アクセス権がない限り、提案されたコマンドを変更する方法はわかりません。

SSHプロトコルを使用する場合は、リモートブランチを追加するだけです(つまり、GitHubの推奨コマンドの代わりにこのコマンド使用します)。既存のブランチを変更するには、次のセクションを参照してください。

$ git remote add origin git@github.com:nikhilbhardwaj/abc.git

既存のリポジトリを変更する

ご存知のように、既存のリポジトリをHTTPSではなくSSHを使用するように切り替えるには、.git/configファイル内のリモートURLを変更します。

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    -url = https://github.com/nikhilbhardwaj/abc.git
    +url = git@github.com:nikhilbhardwaj/abc.git

ショートカットはset-url次のコマンドを使用することです:

$ git remote set-url origin git@github.com:nikhilbhardwaj/abc.git

SSH-HTTPSスイッチの詳細


おかげで、スマートhttpsをデフォルトにすることを知りませんでした。
nikhil

3
これはWindowsユーザーには良いかもしれませんが、Linuxではかなり後退しました。sshは常に機能し、Smart HTTPSの新しいパスワードキャッシングはWindowsでのみ機能します。「Macのバージョンはどこ?」に関するメモがあります。ではなく、単一の Linuxユーザのための単語。
MestreLion 2012

追加する必要があります。このメソッドはgithubのMacクライアントにまったく干渉しません。それを変更すれば、コマンドラインとgitのguiバージョン(githubのクライアント)の両方を問題なく使用できます。
ケマルDAG

1
もう一度set-url助けて!どうもありがとう !
guozqzzu 2017年

182
  • GitHub

    git config --global url.ssh://git@github.com/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://git@bitbucket.org/.insteadOf https://bitbucket.org/
    

これは、GitHub / BitBucketへの接続時にHTTPSではなく常にSSHを使用するようにgitに指示するため、デフォルトでは、パスワードの入力を求められるのではなく、証明書によって認証されます。


4
ドキュメントでこれを調べたい場合は、検索してくださいurl.<base>.insteadOf

2
これはいくつかのことを壊すように注意してください-この変更を行った後、自作のいくつかの機能が動作しなくなったことに気づきました(つまり、デフォルト以外のバージョン/ブランチをインストールします)
プレフィックス

1
gitlabの場合:git config --global url.ssh://git@gitlab.com/.insteadOf gitlab.com
MoOx

2
それがgit config --global url.ssh://git@github.com:.insteadOf github.comであるべきだと思います、なぜならgithubはgit@github.com:<USERNAME> / <REPO> .gitが好きだからです。(EDIT git config --global url.git@github.com:.insteadOf https://github.com/はgit 2.7.4で確実に動作します。)
Glen Keane

1
ここでのコメントは自作の問題に言及しているので、--globalこれをprレポベースで削除して実行するのは良い考えかもしれません。
Pylinux

58

トレバーが提供する応答が正しいです

しかし、これはあなたがあなたに直接追加できるものです.gitconfig

# Enforce SSH
[url "ssh://git@github.com/"]
  insteadOf = https://github.com/
[url "ssh://git@gitlab.com/"]
  insteadOf = https://gitlab.com/
[url "ssh://git@bitbucket.org/"]
  insteadOf = https://bitbucket.org/

2
はるかに簡単な+1
PiersyP 2017年

+1このトリック。カーネル関係者にも推奨されています。カーネル初心者向けメーリングリストのgit pullもご覧ください。
jww 2017年

よりクリーンなソリューション- 「go get」のデフォルトがhttpsで、プライベートリポジトリなどの代わりにURLを個別にsshに設定したいgolangプロジェクトに最適
colm.anseo

1
Gitlabの場合:フェッチではなくプッシュURLに影響を与えたい場合[url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/もありpushInsteadOfます。git remote -vgitが使用する有効なURLを検査するために使用できます。
Beni Cherniavsky-Paskin

これは、少なくとも既存のリポジトリでは機能しません。
Andrew Koster

4

誤って、sshではなくhttpsでリポジトリを複製した可能性があります。私はgithubで何度もこの間違いをしました。クローンを作成するときは、httpsリンクではなく、sshリンクを最初にコピーしてください。


sshリンクで新しいものを複製する必要があります
codenamezero

リポジトリリンクをHTTPからSSHに変更することもできます。他の回答を参照してください。
マイクライオンズ

3

httpsではなくsshでクローンを作成する必要があります。

そのためには、sshキーを設定する必要があります。これを自動化する小さなスクリプトを用意しました。

#!/usr/bin/env bash
email="$1"
hostname="$2"
hostalias="$hostname"
keypath="$HOME/.ssh/${hostname}_rsa"
ssh-keygen -t rsa -C $email -f $keypath
if [ $? -eq 0 ]; then
cat >> ~/.ssh/config <<EOF
Host $hostalias
        Hostname $hostname *.$hostname
        User git
    IdentitiesOnly yes
        IdentityFile $keypath
EOF
fi

のように実行します

bash script.sh myemail@example.com github.com

リモートURLを変更する

git remote set-url origin git@github.com:user/foo.git

のコンテンツを~/.ssh/github.com_rsa.pubgithub.comのsshキーに追加します

接続を確認する

ssh -T git@github.com

0

SSHファイル

~/.ssh/config file
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
    LogLevel QUIET
    ConnectTimeout=10
Host github.com
        User git
        AddKeystoAgent yes
        UseKeychain yes
        Identityfile ~/github_rsa

reponame / .git / configを編集します

[remote "origin"]
        url = git@github.com:username/repo.git
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.