Como obtenho o git como padrão para ssh e não https para novos repositórios

206

Hoje em dia, quando crio um novo repositório no GitHub na página de configuração, recebo:

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

E sempre que preciso enviar um commit, preciso digitar meu nome de usuário e senha do GitHub.

Eu posso mudar isso manualmente para

[email protected]:nikhilbhardwaj/abc.git

no .git/config. Acho isso bastante irritante - existe alguma maneira de configurar o git para usar o SSH por padrão?

Nikhil
fonte
Acho que a resposta do @ MoOx provavelmente é mais consistente com o que você está procurando. O insteadOftruque existe desde pelo menos 2012. Veja também Como converter git:URLs em http:URLs .
JWW

Respostas:

300

Configurar a ramificação de origem de um repositório para ser SSH

A página de configuração do repositório do GitHub é apenas uma lista sugerida de comandos (e o GitHub agora sugere o uso do protocolo HTTPS). A menos que você tenha acesso administrativo ao site do GitHub, não conheço nenhuma maneira de alterar os comandos sugeridos.

Se você preferir usar o protocolo SSH, basta adicionar um ramo remoto como este (por exemplo, use este comando no lugar do comando sugerido pelo GitHub). Para modificar uma ramificação existente, consulte a próxima seção.

$ git remote add origin [email protected]:nikhilbhardwaj/abc.git

Modificar um repositório pré-existente

Como você já sabe, para alternar um repositório pré-existente para usar SSH em vez de HTTPS, você pode alterar o URL remoto dentro do seu .git/configarquivo.

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

Um atalho é usar o set-urlcomando:

$ git remote set-url origin [email protected]:nikhilbhardwaj/abc.git

Mais informações sobre o comutador SSH-HTTPS

David Cain
fonte
Obrigado, eu não sabia que eles tornavam o https inteligente o padrão.
Nikhil
3
Isso pode ser bom para usuários do Windows, mas no Linux era um passo atrás: o ssh sempre funcionava e o novo cache de senha do Smart HTTPS funciona apenas no Windows. Há uma nota sobre "Onde está a versão do Mac?" mas nem uma única palavra para usuários do linux.
MestreLion 14/09/12
Devo acrescentar que, esse método não interfere no cliente mac do github. Altere-o e você poderá usar a linha de comando e a versão da GUI (cliente do github) do git sem problemas.
Kemal Dağ
1
Mais uma vez set-urlme ajude! Muito obrigado !
guozqzzu
183
  • GitHub

    git config --global url.ssh://[email protected]/.insteadOf https://github.com/
    
  • BitBucket

    git config --global url.ssh://[email protected]/.insteadOf https://bitbucket.org/
    

Isso diz ao git para sempre usar o SSH em vez do HTTPS ao se conectar ao GitHub / BitBucket, para que você se autentique por certificado por padrão, em vez de ser solicitada uma senha.

Trevor Austin
fonte
4
Se alguém quiser pesquisar isso na documentação , procure url.<base>.insteadOf.
2
ser cauteloso isso parece quebrar algumas coisas - Tenho notado algumas funcionalidades de homebrew parou de funcionar depois de ter feito essa mudança (ou seja, a instalação não-padrão versões / ramos)
Prefixo
1
Para gitlab: git configuração --global url.ssh: //[email protected]/.insteadOf gitlab.com
MoOx
2
Eu acho que deveria ser git config --global url.ssh: //[email protected]: .insteadDe github.com , porque o github gosta de [email protected]: <USERNAME> / <REPO> .git. (EDIT git config --global [email protected]:.insteadOf https://github.com/trabalha em git 2.7.4, com certeza.)
Glen Keane
1
Como um comentário aqui mencionou problemas de produção em casa, pode ser uma boa ideia remover --globale fazer isso em uma base de recompra.
Pylinux
58

A resposta fornecida por Trevor está correta .

Mas aqui está o que você pode adicionar diretamente no seu .gitconfig:

# Enforce SSH
[url "ssh://[email protected]/"]
  insteadOf = https://github.com/
[url "ssh://[email protected]/"]
  insteadOf = https://gitlab.com/
[url "ssh://[email protected]/"]
  insteadOf = https://bitbucket.org/
MoOx
fonte
2
Muito mais simples +1
PiersyP 28/03
-1 para este truque. Também é recomendado pelo pessoal do kernel. Veja também git pull na lista de discussão dos novatos do kernel.
JWW
solução mais limpa muito - e grande para golang projectos onde "ir buscar" o padrão é https e um querer definir individualmente urls para ssh em vez por exemplo, para repos privadas etc.
colm.anseo
1
Para o Gitlab: [url "ssh://[email protected]/"] insteadOf = https://gitlab.com/também existe pushInsteadOfse você deseja afetar o URL de envio, mas não a busca. Pode ser usado git remote -vpara inspecionar URLs eficazes que o git vai usar.
Beni Cherniavsky-Paskin
Isso não funciona, pelo menos para repositórios existentes.
Andrew Koster
4

Você pode ter clonado acidentalmente o repositório em https, em vez de ssh. Eu cometi esse erro várias vezes no github. Certifique-se de copiar o link ssh em primeiro lugar ao clonar, em vez do link https.

Mike Lyons
fonte
Precisa clonar um novo com o link ssh
codenamezero
Você também pode alterar o link de repo de HTTP para SSH, consulte as outras respostas.
Mike Lyons
3

Você precisa clonar no ssh, não em https.

Para isso, você precisa definir suas chaves ssh. Eu preparei este pequeno script que automatiza isso:

#!/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

e corra como

bash script.sh [email protected] github.com

Alterar seu URL remoto

git remote set-url origin [email protected]:user/foo.git

Adicione conteúdo ~/.ssh/github.com_rsa.pubàs suas chaves ssh no github.com

Verifique a conexão

ssh -T [email protected]
rofrol
fonte
0

Arquivo 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

Editar reponha o nome / .git / config

[remote "origin"]
        url = [email protected]:username/repo.git
bhargav joshi
fonte