Nome de usuário e senha no comando para git push

107

É possível clonar um repositório git, especificando o nome de usuário e a senha no comando. Exemplo:

git clone https://username:[email protected]/file.git

É possível também especificar o nome de usuário e a senha ao enviar? Para que, por exemplo, a execução git push origin --allem seguida saia pedindo uma senha. Eu quero isso em um comando.

(Estou ciente da capacidade de configurar chaves e outras soluções, mas quero saber se há uma maneira de continuar usando o nome de usuário e a senha com um comando.) Estou executando o Git Bash no Windows 8.1.

Jake
fonte
Você encontra solução para git commit?
Nam Vu,

Respostas:

157

Sim você pode fazer

git push https://username:[email protected]/file.git --all

neste caso, https://username:[email protected]/file.gitsubstitua o originemgit push origin --all

Para ver mais opções para git push, tentegit help push

número 5
fonte
13
Observe que isso armazenará o nome de usuário e a senha em texto simples na configuração do git.
cutucar
4
em vez de uma senha simples, você pode usar hash de senha
Vasiliy Vanchuk
1
@VasiliyVanchuk Que tipo de hash você usa? Isso funciona para o Github?
Raphi 01 de
14
o que acontecerá se a senha contiver @?
Rahul Sharma
1
Recomende incluir o caminho completo com ' ', por exemplo:git push 'https://username:[email protected]/file.git'
AlikElzin-kilaka
27

Usei o formato abaixo

git push https://username:[email protected]/file.git --all

e se sua senha ou nome de usuário contiver @ substitua por% 40

Hamidreza
fonte
Você pode até usar WebUtility.UrlEncode (senha) para obter esse% 40
iPradeep
para usuários de php, use isso urlencode($password)para codificar todos os caracteres especiais, não só @.
shyammakwana.me
3

De acordo com a documentação do Git , o último argumento do git pushcomando pode ser o repositório para o qual você deseja enviar:

    git push [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
             [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
             [<repository> [<refspec>…]]

E o repositoryparâmetro pode ser um URL ou um nome remoto.

Portanto, você pode especificar o nome de usuário e a senha da mesma forma que faz no seu exemplo de clonecomando.

Alexey Orlenko
fonte
2
Isso parece adequado, mas quando adiciono o repositório git com nome de usuário e senha como um argumento, como o exemplo, ele ainda solicitará a senha.
Jake
3

O Git não armazenará a senha quando você usar URLs como esse. Em vez disso, ele apenas armazenará o nome de usuário, de modo que só precisará solicitar a senha da próxima vez. Conforme explicado no manual , para armazenar a senha, você deve usar um auxiliar de credencial externo . Para Windows, você pode usar o Windows Credential Store para Git . Esse auxiliar também está incluído por padrão no GitHub para Windows .

Ao usá-lo, sua senha será lembrada automaticamente, portanto, você só precisa digitá-la uma vez. Portanto, quando você clonar, sua senha será solicitada e, em seguida, todas as outras comunicações com o controle remoto não solicitarão sua senha novamente. Em vez disso, o auxiliar de credencial fornecerá a autenticação ao Git.

É claro que isso só funciona para autenticação via https; para acesso ssh ( [email protected]/repository.git) você usa as chaves SSH e aquelas que você lembra de usar ssh-agent(ou o concurso do PuTTY, se estiver usando o plink).

cutucar
fonte
4
"Estou ciente da capacidade de configurar chaves e outras soluções, mas quero saber se existe uma maneira de continuar usando nome de usuário e senha com um comando."
Marvin de
@Marvin Estou ciente dessa observação, mas não queria apenas enviar uma resposta de duas frases, então incluí informações para outros usuários que podem não estar apenas interessados ​​em se conectar via HTTPS.
cutucar
4
Ainda não responde a sua pergunta, no entanto.
Marvin de
3

É possível, mas, antes do git 2.9.3 (agosto de 2016), a git pushimprimiria a url completa usada ao enviar de volta para o repositório clonado.
Isso incluiria seu nome de usuário e senha!

Mas não mais: consulte commit 68f3c07 (20 de julho de 2016) e commit 882d49c (14 de julho de 2016) de Jeff King ( peff) .
(Incorporado por Junio ​​C Hamano - gitster- no commit 71076e1 , 08 de agosto de 2016)

push: tornar anônimo o URL na saída de status

Commit 47abd85 (fetch: tira nomes de usuário de urls antes de armazená-los, 2009-04-17, Git 1.6.4) ensinou fetch a tornar URLs anônimos.
O objetivo principal era evitar colar senhas em mensagens de mesclagem e confirmação, mas, como efeito colateral, também evitamos imprimi-las em stderr.

O lado push não tem o problema de consolidação de mesclagem, mas provavelmente deve evitar imprimi-los em stderr . Podemos reutilizar a mesma função de anonimato.

Observe que, para que isso aconteça, as credenciais teriam que aparecer na linha de comando ou em um arquivo de configuração git, nenhum dos quais é particularmente seguro.
Portanto, as pessoas deveriam passar a usar ajudantes de credencial, o que elimina o problema.

Mas isso não é desculpa para não melhorar a situação das pessoas que, por qualquer motivo, acabam usando credenciais embutidas na URL.

VonC
fonte
1

Para qualquer pessoa que tenha problemas com senhas com caracteres especiais, basta omitir a senha e será solicitada:

git push https://[email protected]/YOUR_GIT_USERNAME/yourGitFileName.git
Chris Adams
fonte