Existe uma maneira de armazenar em cache as credenciais do GitHub para enviar confirmações por push?


1867

Recentemente, mudei para sincronizar meus repositórios para https: // no GitHub (devido a problemas de firewall), e ele solicita uma senha sempre.

Existe uma maneira de armazenar em cache as credenciais, em vez de autenticar sempre que isso git push?



2
Agora você pode usar um auxiliar de credencial para criptografar o _netrcarquivo que contém suas credenciais. Veja minha resposta abaixo . Achei mais seguro que o git-credential-winstore.exe(cache de memória), que é um pouco problemático no Windows.
VonC


git-credential-winstorefuncionou melhor para o Windows. O que há de buggy? Configurar o ssh é a opção preferida, embora eu tenha feito isso várias vezes, é muito mais suscetível a erros e, às vezes, simplesmente não funciona quando você precisa se conectar a vários hosts.
Bron Davies

2
Por "certificado SSH", presumo que você queira dizer "chave privada SSH".
Michael Mior

Respostas:


2369

Com o Git versão 1.7.9 e posterior

Desde o Git 1.7.9 (lançado no final de janeiro de 2012), existe um mecanismo puro no Git para evitar a necessidade de digitar sua senha o tempo todo para HTTP / HTTPS, chamados auxiliares de credenciais . (Graças a dazonic por apontar esse novo recurso nos comentários abaixo.)

Com o Git 1.7.9 ou posterior, você pode usar apenas um dos seguintes auxiliares de credenciais:

git config --global credential.helper cache

... que diz ao Git para manter sua senha em cache na memória por (por padrão) 15 minutos. Você pode definir um tempo limite mais longo com:

git config --global credential.helper "cache --timeout=3600"

(Esse exemplo foi sugerido na página de ajuda do GitHub para Linux .) Você também pode armazenar suas credenciais permanentemente, se assim desejar, veja as outras respostas abaixo.

A ajuda do GitHub também sugere que, se você estiver no Mac OS X e usou o Homebrew para instalar o Git, poderá usar o keystore nativo do Mac OS X com:

git config --global credential.helper osxkeychain

Para o Windows, existe um auxiliar chamado Git Credential Manager para Windows ou wincred no msysgit .

git config --global credential.helper wincred # obsolete

Com o Git for Windows 2.7.3+ (março de 2016):

git config --global credential.helper manager

Para Linux, você pode usargnome-keyring (ou outra implementação de chaveiro, como o KWallet).

Com versões Git anteriores à 1.7.9

Nas versões do Git anteriores à 1.7.9, essa opção mais segura não está disponível e você precisará alterar o URL que o seu origincontrole remoto usa para incluir a senha dessa maneira:

https://you:password@github.com/you/example.git

... em outras palavras, :passwordapós o nome de usuário e antes do @.

Você pode definir um novo URL para seu origincontrole remoto com:

git config remote.origin.url https://you:password@github.com/you/example.git

Certifique-se de usar httpse você deve estar ciente de que, se fizer isso, sua senha do GitHub será armazenada em texto sem formatação no .gitdiretório, o que é obviamente indesejável.

Com qualquer versão do Git (bem, desde a versão 0.99)

Uma abordagem alternativa é colocar seu nome de usuário e senha em seu ~/.netrcarquivo, embora, como manter a senha na URL remota, isso signifique que sua senha será armazenada no disco em texto sem formatação e, portanto, seja menos segura e não recomendada. No entanto, se você quiser adotar essa abordagem, adicione a seguinte linha ao seu ~/.netrc:

machine <hostname> login <username> password <password>

... substituindo <hostname>pelo nome do host do servidor <username>e <password>por seu nome de usuário e senha. Lembre-se também de definir permissões restritivas do sistema de arquivos nesse arquivo:

chmod 600 ~/.netrc

Observe que no Windows, esse arquivo deve ser chamado _netrce talvez você precise definir a variável de ambiente% HOME% - para obter mais detalhes, consulte:


72
Não armazene sua senha em texto simples. A partir do Git 1.7.9, você pode usar auxiliares de credenciais. git config --global credential.helper osxkeychainno OS X. Para outros OS ver help.github.com/articles/set-up-git
dazonic

6
FWIW, o material de chaveiro osx faz parte do código-fonte GIT base, não é um componente exclusivo do Brew ou MacPorts ou seja qual for o sabor do mês. E você nem precisa criar o git a partir do zero - apenas cd contrib / credential / osxkeychain / e execute make.
Sintetizadorpatel

2
Com a autenticação de dois fatores, você precisa usar o que o github chama de Token de Acesso por Pessoa . Na verdade, você sempre deve usar uma, pois, diferentemente de uma senha, pode controlar o acesso que ela fornece. Apenas substitua a senha no URL para terminar https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Torna as senhas de texto simples armazenadas no disco quase seguras o suficiente para serem usadas.
Russell Stuart

12
git config --global credential.helper cachenão funciona em janelas: stackoverflow.com/questions/11693074/... uso gitcredentialstore no Windows um ser feliz
Sebastian J.

8
Alguma maneira de definir esse tempo limite para o infinito?
Sudo

720

Você também pode fazer com que o Git armazene suas credenciais permanentemente usando o seguinte:

git config credential.helper store

Nota: Embora isso seja conveniente, o Git armazenará suas credenciais em texto não criptografado em um arquivo local (.git-credentials) no diretório do seu projeto (veja o diretório "home" abaixo). Se você não gostar disso, exclua esse arquivo e passe para a opção de cache.

Se você deseja que o Git continue solicitando credenciais sempre que precisar se conectar ao repositório remoto, você pode executar este comando:

git config --unset credential.helper

Para armazenar as senhas em .git-credentialssua %HOME%diretório em oposição ao diretório do projeto: use a --globalbandeira

git config --global credential.helper store

7
No Windows, você pode fazer o download de um utilitário auxiliar que configura as coisas para armazenar uma versão criptografada da sua senha GIT na Windows Creditial Store, consulte confluence.atlassian.com/display/STASH/…
Contango

76
Eu descobri que eu tinha para especificar --global ou ele iria tentar armazenar as configurações no repositório atual:git config --global credential.helper store
Brian Gordon

6
Por que o cache seria armazenado permanentemente? Compartilhando computadores ou algo assim?
Michael J. Calkins

2
@BrianGordon Estou usando o GIT 1.9.5 no Windows e a --globalflag foi redundante. Mesmo sem esse sinalizador, o arquivo de credenciais foi criado no %USER_HOME%diretório
JFrenetic

2
se não estiver armazenando em texto sem formatação, com o que está protegido? Sua senha? Não seria necessário solicitar sua senha de administrador ao se conectar ao git? Ter que digitar uma senha para obter outra senha é um pouco estranho?
Cruncher

101

TLDR; Use um arquivo netrc criptografado com o Git 1.8.3+ .

É possível salvar uma senha para um URL HTTPS do repositório Git com um ~/.netrc(Unix) ou %HOME%/_netrc(observe o _) no Windows.

Mas : esse arquivo armazenaria sua senha em texto simples.

Solução : Criptografe esse arquivo com GPG (GNU Privacy Guard) e faça com que o Git descriptografe-o sempre que precisar de uma senha (para push/ pull/ fetch/ cloneoperação).


Nota: com o Git 2.18 (Q2 2018), agora você pode personalizar o GPG usado para descriptografar o arquivo criptografado. .netrc arquivo .

Consulte commit 786ef50 , commit f07eeed (12 de maio de 2018) por Luis Marsano (``) .
(Mesclado por Junio ​​C Hamano - gitster- na confirmação 017b7c5 , 30 de maio de 2018)

git-credential-netrc: gpgopção de aceitação

git-credential-netrcfoi codificado para descriptografar com " gpg", independentemente da opção gpg.program.
Este é um problema em distribuições como o Debian que chamam o GnuPG moderno de outra coisa, como ' gpg2'


Instruções passo a passo para Windows

Com o Windows:

(O Git tem a gpg.exeem sua distribuição, mas o uso de uma instalação completa do GPG inclui a gpg-agent.exe, que memoriza sua frase secreta associada à sua chave GPG.)

  • Instale gpg4Win Lite, a interface mínima da linha de comandos do gnupg (pegue a mais recentegpg4win-vanilla-2.X.Y-betaZZ.exe ) e complete o seu PATH com o diretório de instalação do GPG:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(Observe o copycomando ' ': Git precisará de um script Bash para executar o comando ' gpg'. Como gpg4win-vanilla-2vem com ele gpg2.exe, é necessário duplicá-lo.)

  • Crie ou importe uma chave GPG e confie nela:

    gpgp --import aKey
    # or
    gpg --gen-key

(Certifique-se de inserir uma senha para essa chave.)

  • Confie nessa chave

  • Instale o script auxiliar de credencial em um diretório dentro de %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(Cuidado: o script é renomeado no Git 2.25.x / 2.26, veja abaixo)

(Sim, esse é um script do Bash, mas funcionará no Windows, pois será chamado pelo Git.)

  • Crie um arquivo _netrc em texto não criptografado

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

(Não esqueça a protocolparte ' ': ' http' ou ' https' dependendo do URL que você usará.)

  • Criptografar esse arquivo:

    gpg -e -r a_recipient _netrc

(Agora você pode excluir o _netrcarquivo, mantendo apenas o arquivo _netrc.gpgcriptografado.)

  • Use esse arquivo criptografado:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(Observe que ' /': C:\path\to...não funcionaria de jeito nenhum.) (Você pode usar primeiro-v -d para ver o que está acontecendo.)

A partir de agora, qualquer comando Git que use uma URL HTTP (S) que exija autenticação descriptografará esse _netrc.gpgarquivo e usará o login / senha associado ao servidor que você está entrando em contato. Na primeira vez, o GPG solicitará a senha da sua chave GPG para descriptografar o arquivo. Outras vezes, o gpg-agent iniciado automaticamente pela primeira chamada de GPG fornecerá essa senha para você.

Dessa forma, você pode memorizar vários URLs / logins / senhas em um arquivo e armazená-los no seu disco criptografado.
Acho mais conveniente do que um auxiliar de "cache", onde você precisa se lembrar e digitar (uma vez por sessão) uma senha diferente para cada um dos seus serviços remotos, para que a senha seja armazenada em cache na memória.


Com o Git 2.26 (primeiro trimestre de 2020), o auxiliar de credencial de amostra para uso .netrcfoi atualizado para funcionar imediatamente. Veja patch / discussão .

Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu ( Denton-L) .
(Incorporado por Junio ​​C Hamano - gitster- in commit 1fd27f8 , 25 dez 2019)

contrib/credential/netrc: tornar PERL_PATHconfigurável

Assinado por: Denton Liu

O caminho shebang para o intérprete Perl git-credential-netrcfoi codificado.
No entanto, alguns usuários podem tê-lo localizado em um local diferente e, portanto, teriam que editar manualmente o script.

Inclua um .perlprefixo no script para denotá-lo como um modelo e ignore a versão gerada.
Aumentar o Makefilepara que ele gera a git-credential-netrcpartir degit-credential-netrc.perl , assim como outros scripts Perl.

As receitas Makefile foram descaradamente roubadas contrib/mw-to-git/Makefile.

E:

Com 2.26 (Q1 2020), o auxiliar de credencial de amostra para usar .netrc foi atualizado para funcionar de maneira imediata.

Consulte commit 6579d93 , commit 1c78c78 (20 dez 2019) por Denton Liu ( Denton-L) .
(Incorporado por Junio ​​C Hamano - gitster- in commit 1fd27f8 , 25 dez 2019)

contrib/credential/netrc: trabalhar fora de um repositório

Assinado por: Denton Liu

Atualmente, git-credential-netrcnão funciona fora de um repositório git. Falha com o seguinte erro:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

Porém, não há nenhuma razão real para estar dentro de um repositório. Os auxiliares de credenciais também devem funcionar bem fora do repositório.

Chame a versão não auto config()para que git-credential-netrcnão precise mais ser executada em um repositório.

Jeff King ( peff) acrescenta:

Eu suponho que você esteja usando um gpg criptografado netrc(se não, provavelmente deveria usar credential-store).
Para acesso à senha "somente leitura", acho que a combinação de passcom config é um pouco melhor:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"

1
tentando a mesma coisa no linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..e eu recebo "git: 'credential-netrc' não é um comando git ver 'git help'".
ensolarado

4
@sunny É curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrcpara isso: você precisa copiar o local git-credential-netrcem seu caminho ( $PATH), para que o git possa chamar ' credential-netrc'.
VonC 22/12/13

Bem, o _netrcnão funcionou para mim em um Windows 7PC, mas .netrcfuncionou para o youtube-dl com o --netrcargumento passado a ele.
Iulian Onofrei

@VonC a URL atual parece estar https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(canalizando sete anos depois 😉)
Gwyneth Llewelyn

1
@GwynethLlewelyn Obrigado. Eu editei a resposta de acordo. Não hesite em editá-lo você mesmo se vir alguma outra informação obsoleta.
VonC 26/03

43

Existe uma maneira fácil e antiquada de armazenar credenciais de usuário em um URL HTTPS:

https://user:password@github.com/...

Você pode alterar o URL com git remote set-url <remote-repo> <URL>

A desvantagem óbvia dessa abordagem é que você precisa armazenar a senha em texto sem formatação. Você ainda pode inserir o nome de usuário (https://user@github.com/... ), que pelo menos poupará metade do aborrecimento.

Você pode preferir mudar para SSH ou usar o software cliente GitHub.


2
O nome de usuário / senha pode precisar ser codificado, consulte stackoverflow.com/a/34611311/3906760
MrTux 5/16

43

Use um armazenamento de credenciais.

Para o Git 2.11+ no OS X e Linux , use o armazenamento de credenciais incorporado do Git :

git config --global credential.helper libsecret

Para o msysgit 1.7.9+ no Windows :

git config --global credential.helper wincred

Para o Git 1.7.9+ no OS X, use:

git config --global credential.helper osxkeychain

2
Tenho certeza de que este é o caminho a percorrer, mas eu recebo um erro com tristeza:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb

1
Obrigado, mas recebo o mesmo erro de alguma forma. Estou fazendo algo errado? Eu digito o comando e nada acontece. Assim que eu envio, são solicitadas as credenciais, que insiro com êxito, mas recebo o erro de que não é um comando git depois de fazer isso.
Codepleb 14/02

2
Antes libsecret irá funcionar em Linux, você precisa fazer estes passos: stackoverflow.com/a/40312117/775800
Lavamantis

1
Outra coisa: se você tiver o 2FA ativado no Github, sua senha não funcionará. Mas você pode criar um token de acesso pessoal na página "Configurações" do Github e esse token funciona como sua senha. github.com/github/hub/issues/822
Lavamantis

3
Problema de segurança: o gerenciador de credenciais do Windows torna sua senha de texto sem formatação acessível a qualquer pessoa logada na sua conta do Windows. Tudo o que eles precisam fazer é enviar uma solicitação ao gerente de credenciais, como printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( mais detalhes aqui ). Você sempre deve usar um token de acesso pessoal com isso e, é claro, usar 2FA na sua conta do GitHub.
CJS

40

Você pode apenas usar

git config credential.helper store

Quando você digitar a senha da próxima vez com pull ou push, ela será armazenada no arquivo .git-credentials como texto sem formatação (um pouco inseguro, mas apenas coloque-o em uma pasta protegida).

E é isso, como declarado nesta página:

git-credential-store


3
Para o Git para Windows 2.7.3 (março de 2016): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , que seria em git config credential.helper managervez disso
VonC

23

Não foi imediatamente óbvio para mim que eu precisava baixar o ajudante primeiro! Encontrei o download credential.helper no Autenticador permanente do Atlassian com repositórios Git .

Citar:

Siga estas etapas se desejar usar o Git com cache de credenciais no OS X:

Faça o download do binário git-credential-osxkeychain.

Execute o comando abaixo para garantir que o binário seja executável:

chmod a+x git-credential-osxkeychain

Coloque no diretório /usr/local/bin .

Execute o comando abaixo:

git config --global credential.helper osxkeychain

23

Basta incluir as credenciais de login como parte da URL:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

Nota: Eu não recomendo este método, mas se você estiver com pressa e mais nada funcionar, poderá usar esse método.


12
ele vai trabalhar você tem que escapar @ com% 40 em seu e-mail id
Tarun Gupta

E se tivermos um '+' no ID do email? Eu tentei a mesma fuga, mas o push dizia 'repo not found' #
killjoy

4
tem% 2B em vez de +
Tarun Gupta 03/08

Armazenar a senha em texto simples e facilmente acessível pode não ser a solução ideal.
reduzindo a atividade

20

Em uma configuração do GNU / Linux, um ~ / .netrc também funciona muito bem:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Pode depender de quais bibliotecas de rede o Git está usando para o transporte HTTPS .


4
Certifique-se de também chmod 0600 ~/.netrc.
poolie 31/05

Só quero deixar um link aqui para a página de manual do Ubuntu netrc . Eu precisava criá-lo para outro usuário (/home/git/.netrc) e depois mudar de propriedade para esse usuário.
Zacharydl 14/01

17

Para Windows, você pode usar o Git Credential Manager plug-in (GCM). Atualmente, é mantido pela Microsoft. O bom é que ela salva a senha no Windows Credential Store, não como texto sem formatação.

Há um instalador na página de lançamentos do projeto. Isso também instalará a versão oficial do Git for Windows com o gerenciador de credenciais embutido. Permite autenticação de dois fatores para o GitHub (e outros servidores). E possui uma interface gráfica para efetuar login inicialmente.

Para usuários do Cygwin (ou usuários que já usam o Git for Windows oficial), você pode preferir a instalação manual. Faça o download do pacote zip na página de lançamentos . Extraia o pacote e execute o install.cmdarquivo. Isso será instalado na sua ~/binpasta. (Verifique se o ~/bindiretório está no seu PATH.) Você o configura usando este comando:

git config --global credential.helper manager

O Git executará o git-credential-manager.exequando se autenticar em qualquer servidor.


3
Qualquer pessoa conectada à sua conta tem acesso fácil ao texto simples da senha. Tudo o que eles precisam fazer é enviar uma solicitação ao gerente de credenciais, como printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( mais detalhes aqui ). Você sempre deve usar um token de acesso pessoal com isso e, é claro, usar 2FA na sua conta do GitHub.
Css # 20/18

13

Se você não deseja armazenar sua senha em texto sem formatação, como Mark disse, você pode usar um URL do GitHub diferente para buscar do que para enviar. No seu arquivo de configuração, em [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

Ele ainda solicitará uma senha quando você pressionar, mas não quando buscar, pelo menos para projetos de código aberto.


12

OAuth

Você pode criar seu próprio token de API pessoal ( OAuth ) e usá-lo da mesma maneira que usaria suas credenciais normais (em /settings/tokens:). Por exemplo:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Outro método é configurar seu usuário / senha ~/.netrc( _netrcno Windows), por exemplo

machine github.com
login USERNAME
password PASSWORD

Para HTTPS, adicione a linha extra:

protocol https

Um auxiliar de credencial

Para armazenar em cache sua senha do GitHub no Git ao usar HTTPS, você pode usar um auxiliar de credencial para dizer ao Git para lembrar seu nome de usuário e senha do GitHub toda vez que conversar com o GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperé obrigatório),
  • Janelas: git config --global credential.helper wincred
  • Linux e outros: git config --global credential.helper cache

Relacionado:


10

Você pode usar ajudantes de credenciais.

git config --global credential.helper 'cache --timeout=x'

Onde xé o número de segundos.


7
É um número de segundos ... Alguns gênios o atualizaram em milissegundos e todos o aprovaram sem verificar. Por favor, não confunda as pessoas se você não souber a resposta. Obrigado!
Charan

Você pode dar um link para um lugar onde store, cachee outras coisas comuns estão listados e explicados?
SeNãoEstiverNaLista

3
Importa-se de mencionar o fato de que isso faz merda, a menos que você chame outro comando específico para usar o 'cache' como o gerente primeiro? Esse material é tão enigmático, todas essas respostas estão incompletas e nenhuma delas funciona. Incrivelmente frustrante. Veja isso: stackoverflow.com/a/24800870/88409
Triynko

10

Depois de clonar o repositório repo, você pode editar repo/.git/confige adicionar algumas configurações, como abaixo:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Então você não será solicitado usernamee passwordnovamente.


Funciona comigo helper = manager(mas me pedem nome de usuário + repositório para o primeiro envio).
Stéphane Laurent

com helper = manager Estou recebendo erro credential-manager não é um comando git
Kapil

Infelizmente, o git ignora a senha no arquivo de configuração. .git_credentials com credential.store é a única opção.
Avamander

9

Sei que essa não é uma solução segura, mas às vezes você precisa apenas de uma solução simples - sem instalar mais nada. E como helper = store não funcionou para mim, criei um auxiliar fictício:

Crie um script e coloque-o na pasta bin de usuários, aqui chamada credfake , esse script fornecerá seu nome de usuário e sua senha:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

torne-o executável:

chmod u+x /home/mahuser/bin/credfake

então configure-o no git:

git config --global credential.helper /home/mahuser/bin/credfake

(ou use-o sem --global apenas para um repositório)

e - voilá - git usará este usuário + senha.


Concordo. Solução simples (se não segura), de fato. +1, desde que você saiba o que está fazendo.
VonC

7

Um token de autenticação deve ser usado em vez da senha da conta. Vá para configurações / aplicativos do GitHub e crie um token de acesso pessoal. O token pode ser usado da mesma maneira que uma senha.

O token destina-se a permitir que os usuários não usem a senha da conta para o trabalho do projeto. Use a senha apenas ao realizar trabalhos de administração, como criar novos tokens ou revogar tokens antigos.


Em vez de um token ou senha que concede ao usuário acesso total a uma conta do GitHub, uma chave de implantação específica do projeto pode ser usada para conceder acesso a um único repositório do projeto. Um projeto Git pode ser configurado para usar essa chave diferente nas etapas a seguir, quando você ainda pode acessar outras contas ou projetos Git com sua credencial normal:

  1. Escreva um arquivo de configuração SSH que contenha o Host, IdentityFilepara a chave de implantação, talvez UserKnownHostsFileoe talvez oUser (embora eu ache que você não precise dele).
  2. Escreva um script shell SSH wrapper que seja praticamente ssh -F /path/to/your/config $*
  3. Anexe GIT_SSH=/path/to/your/wrapperantes do seu comando Git normal. Aqui o git remote(origem) deve usar o git@github.com:user/project.gitformato.

7

É melhor usar credenciais para segurança, mas você pode mantê-lo por algum tempo usando o cache:

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

Suas credenciais serão salvas por 3600 segundos.


Isso significa que após 3600 segundos, temos que inserir a senha novamente ??? Como salvá-los permanentemente?
HoangVu 27/08/15

$ git config credential.helper 'cache - timeout = 3600' erro: não foi possível bloquear o arquivo de configuração .git / config: não existe esse arquivo ou diretório
PlantationGator

Isso funcionou: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator

@Tama Eu sei que já faz três anos, mas você pode simplesmente deixar de fora --timeoute as credenciais serão armazenadas para sempre.
Neil Chowdhury

Isso funcionará dentro de um contêiner do Docker (com base em windowsservercore)?
Peter Mortensen

5

As coisas são um pouco diferentes se você estiver usando autenticação de dois fatores como eu. Como não encontrei uma boa resposta em outro lugar, colocarei uma aqui para que talvez eu possa encontrá-la mais tarde.

Se você estiver usando autenticação de dois fatores, especificar o nome de usuário / senha nem funcionará - você terá acesso negado. Mas você pode usar um token de acesso ao aplicativo e usar o assistente de credencial do Git para armazená-lo em cache. Aqui estão os links pertinentes:

E não me lembro de onde vi isso, mas quando você solicita seu nome de usuário, é onde você coloca o token de acesso ao aplicativo. Em seguida, deixe a senha em branco. Funcionou no meu Mac.


ao usar a autenticação bidirecional, você usa o "token de acesso" como a senha. o nome de usuário permanece o mesmo de sempre
Ben Yitzhaki

4

Isso funciona para mim, estou usando o Windows 10

git config --global credential.helper wincred

4

Normalmente você tem um URL remoto, algo como isto,

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Se você quiser pular nome de usuário e senha enquanto estiver usando git push, tente o seguinte:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Acabei de adicionar o mesmo URL (com detalhes do usuário, incluindo senha) à origem.

NOTA: Não funciona se o nome de usuário for um ID de email.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

Eu recebi minha resposta da página de manual gitcredentials (7) . No meu caso, não tenho cache de credenciais na instalação do Windows; Eu uso a loja de credenciais.

Depois de usar o armazenamento de credenciais, o nome de usuário / senha são armazenados no arquivo [pasta do usuário] / .git-credentials. Para remover o nome de usuário / senha, basta excluir o conteúdo do arquivo.


2
Quando você não possui um cache de credenciais no Windows, sugiro que você use git config --global credential.helper wincredessa senha permanentemente.
Chetabahana

2

A documentação do compositor menciona que você pode impedir que ela use a API do GitHub, para que ela atue como git clone:

Se você definir a no-apichave trueem um repositório GitHub, ele clonará o repositório como faria com qualquer outro repositório Git, em vez de usar a API do GitHub. Mas, ao contrário do uso do gitdriver diretamente, o compositor ainda tentará usar os arquivos zip do GitHub.

Portanto, a seção ficaria assim:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Lembre-se de que a API existe por um motivo. Portanto, este deve ser um método de último recurso em relação ao aumento de carga no github.com.


Não tenho certeza do que esta resposta tem a ver com a pergunta original.
Charles Oppermann

2

Você também edita o bashrc arquivo e adiciona um script nele.

Isso pedia sua senha uma vez quando você inicia o Git e a lembra até que você se desconecte.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

Se você estiver usando osxkeychain e tiver expirado um token e quiser atualizá-lo, siga estas etapas:

Execute o terminal e pressione enter duas vezes.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Agora você deve ser solicitado a fornecer um nome de usuário / senha. No entanto, às vezes parece que isso não é necessário e você deve continuar entrando novamente.

Nesse caso, reinicie o computador . Agora, da próxima vez que você executar um comando git e digitar seu nome de usuário / senha, ele será salvo.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.