Nama pengguna dan kata sandi dalam perintah untuk git push

107

Dimungkinkan untuk mengkloning repositori git, menentukan nama pengguna dan kata sandi dalam perintah. Contoh:

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

Apakah mungkin juga untuk menentukan nama pengguna dan kata sandi saat mendorong? Jadi, misalnya, menjalankan git push origin --allakan menampilkan meminta kata sandi. Saya ingin ini dalam satu perintah.

(Saya mengetahui kemampuan untuk mengatur kunci dan solusi lain, tetapi saya ingin tahu apakah ada cara untuk tetap menggunakan nama pengguna dan kata sandi dengan satu perintah.) Saya menjalankan Git Bash di Windows 8.1.

Jake
sumber
Apakah Anda menemukan solusi untuk git commit?
Nam Vu

Jawaban:

157

Ya, Anda bisa melakukannya

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

dalam hal ini https://username:[email protected]/file.gitganti originingit push origin --all

Untuk melihat opsi lainnya git push, cobagit help push

nomor 5
sumber
13
Perhatikan bahwa ini akan menyimpan nama pengguna dan kata sandi dalam teks biasa dalam konfigurasi git.
aduk
4
alih-alih kata sandi biasa, Anda dapat menggunakan hash kata sandi
Vasiliy Vanchuk
1
@VasiliyVanchuk Jenis hash apa yang Anda gunakan? Apakah ini berfungsi untuk Github?
Raphi
14
apa yang terjadi jika kata sandi mengandung @?
Rahul Sharma
1
Rekomendasikan untuk menyertakan jalur lengkap dengan ' ', misalnya:git push 'https://username:[email protected]/file.git'
AlikElzin-kilaka
27

Saya menggunakan format di bawah ini

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

dan jika kata sandi atau nama pengguna Anda mengandung @ gantilah dengan% 40

Hamidreza
sumber
Anda bahkan dapat menggunakan WebUtility.UrlEncode (kata sandi) untuk mendapatkan% 40
iPradeep
untuk pengguna php gunakan ini urlencode($password)ini akan menyandikan semua karakter khusus tidak hanya @.
shyammakwana.me
3

Menurut dokumentasi Git , argumen terakhir dari git pushperintah tersebut dapat berupa repositori yang ingin Anda dorong:

    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>…]]

Dan repositoryparameternya bisa berupa URL atau nama jarak jauh.

Jadi Anda dapat menentukan nama pengguna dan kata sandi dengan cara yang sama seperti yang Anda lakukan di contoh cloneperintah Anda.

Alexey Orlenko
sumber
2
Sepertinya cocok, tetapi ketika saya menambahkan git repo dengan nama pengguna dan kata sandi sebagai argumen, sebagai contoh, itu masih meminta kata sandi.
Jake
3

Git tidak akan menyimpan kata sandi saat Anda menggunakan URL seperti itu. Sebagai gantinya, ini hanya akan menyimpan nama pengguna, jadi itu hanya perlu meminta Anda untuk kata sandi di lain waktu. Seperti yang dijelaskan di manual , untuk menyimpan kata sandi, Anda harus menggunakan pembantu kredensial eksternal . Untuk Windows, Anda dapat menggunakan Windows Credential Store untuk Git . Helper ini juga disertakan secara default di GitHub untuk Windows .

Saat menggunakannya, kata sandi Anda akan otomatis diingat, jadi Anda hanya perlu memasukkannya sekali. Jadi, ketika Anda mengkloning, Anda akan dimintai kata sandi, dan kemudian setiap komunikasi lebih lanjut dengan remote control tidak akan meminta kata sandi Anda lagi. Sebagai gantinya, pembantu kredensial akan memberikan otentikasi kepada Git.

Ini tentu saja hanya berfungsi untuk otentikasi melalui https; untuk akses ssh ( [email protected]/repository.git) Anda menggunakan kunci SSH dan yang dapat Anda ingat menggunakan ssh-agent(atau kontes PuTTY jika Anda menggunakan plink).

menyodok
sumber
4
"Saya mengetahui kemampuan untuk menyiapkan kunci dan solusi lain, tetapi saya ingin tahu apakah ada cara untuk tetap menggunakan nama pengguna dan sandi dengan satu perintah."
Marvin
@Marvin Saya mengetahui komentar itu, namun saya tidak hanya ingin mengirimkan jawaban dua kalimat, jadi saya menyertakan informasi untuk pengguna lain yang mungkin tidak hanya tertarik untuk terhubung melalui HTTPS.
aduk
4
Itu masih belum menjawab pertanyaannya.
Marvin
3

Mungkin saja, tetapi sebelum git 2.9.3 (Agustus 2016), a git pushakan mencetak url lengkap yang digunakan saat mendorong kembali ke repo kloning.
Itu akan termasuk nama pengguna dan kata sandi Anda!

Tapi tidak lebih: Lihat commit 68f3c07 (20 Jul 2016), dan commit 882d49c (14 Jul 2016) oleh Jeff King ( peff) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit 71076e1 , 08 Agustus 2016)

push: menganonimkan URL dalam keluaran status

Commit 47abd85 (ambil: Hapus nama pengguna dari url sebelum menyimpannya, 2009-04-17, Git 1.6.4) mengajarkan pengambilan untuk menganonimkan URL.
Tujuan utamanya adalah untuk menghindari menempelnya kata sandi dalam pesan komit-gabungan, tetapi sebagai efek sampingnya, kami juga menghindari mencetaknya ke stderr.

Sisi dorong tidak memiliki masalah merge-commit, tetapi mungkin harus menghindari pencetakannya ke stderr . Kami dapat menggunakan kembali fungsi anonim yang sama.

Perhatikan bahwa agar ini muncul, kredensial harus muncul di baris perintah atau di file konfigurasi git, yang keduanya tidak terlalu aman.
Jadi orang harus beralih menggunakan pembantu kredensial sebagai gantinya, yang membuat masalah ini hilang.

Tapi itu bukan alasan untuk tidak memperbaiki situasi bagi orang-orang yang karena alasan apa pun akhirnya menggunakan kredensial yang disematkan di URL.

VonC
sumber
2

Bagi siapa pun yang memiliki masalah dengan kata sandi dengan karakter khusus, hilangkan kata sandi dan itu akan meminta Anda untuk itu:

git push https://[email protected]/YOUR_GIT_USERNAME/yourGitFileName.git
Chris Adams
sumber
Sepertinya jawaban Anda adalah satu-satunya di seluruh web yang menyatakan langsung bagaimana hanya memberikan nama pengguna.
shuhalo