Saya baru-baru ini beralih ke sinkronisasi saya repositori untuk https:// di GitHub (karena masalah firewall), dan meminta password setiap kali.
Apakah ada cara untuk cache mandat, bukan otentikasi setiap kali git push
?
Sejak Git 1.7.9 (dirilis pada akhir januari 2012), ada yang rapi mekanisme di Git untuk menghindari harus mengetikkan kata sandi anda sepanjang waktu untuk HTTP / HTTPS, yang disebut credential pembantu. (Terima kasih kepada dazonic untuk menunjukkan fitur baru ini di komentar di bawah ini.)
Dengan Git 1.7.9 atau lambat, anda hanya dapat menggunakan salah satu dari berikut credential pembantu:
git config --global credential.helper cache
... yang memberitahu Git untuk menjaga password anda cache di memori (secara default) 15 menit. Anda dapat mengatur waktu yang lebih lama dengan:
git config --global credential.helper "cache --timeout=3600"
(Contoh yang disarankan dalam GitHub halaman bantuan untuk Linux.) Anda juga dapat menyimpan kredensial anda secara permanen jika jadi diinginkan, lihat jawaban yang lain di bawah ini.
GitHub's membantu menunjukkan bahwa jika anda're pada Mac OS X dan digunakan Homebrew untuk install Git, anda dapat menggunakan Mac asli OS X keystore dengan:
git config --global credential.helper osxkeychain
Untuk Windows, ada pembantu yang disebut Git Credential Manager untuk Windows atau wincred di msysgit.
git config --global credential.helper wincred # obsolete
Dengan Git untuk Windows 2.7.3+ (Maret 2016):
git config --global credential.helper manager
Untuk Linux, anda dapat menggunakangnome-keyring
](https://stackoverflow.com/questions/13385690/how-to-use-git-with-gnome-keyring-integration)(atau lainnya keyring implementasi seperti KWallet).
Dengan versi Git sebelum 1.7.9, ini lebih aman opsi ini tidak tersedia, dan anda'll perlu mengubah URL yang asal
remote menggunakan untuk memasukkan password di mode ini:
https://you:[email protected]/you/example.git
... dalam kata lain dengan password
setelah username dan sebelum @
.
Anda dapat mengatur URL baru untuk asal
remote dengan:
git config remote.origin.url https://you:[email protected]/you/example.git
Pastikan bahwa anda menggunakan https
, dan anda harus menyadari bahwa jika anda melakukan ini, anda GitHub password akan disimpan dalam plaintext pada anda .git
direktori, yang jelas tidak diinginkan.
Sebuah pendekatan alternatif adalah untuk memasukkan username dan password anda ~/.netrc
file, meskipun, seperti dengan menjaga password pada remote URL, ini berarti bahwa password anda akan disimpan pada disk dalam bentuk teks biasa, dan dengan demikian kurang aman dan tidak dianjurkan. Namun, jika anda ingin mengambil pendekatan ini, tambahkan baris berikut ke ~/.netrc
:
machine <hostname> login <username> password <password>
... mengganti <hostname>
dengan server's hostname, dan <username>
dan <password>
dengan username dan password anda. Juga ingat untuk mengatur pembatasan sistem file permissions pada file tersebut:
chmod 600 ~/.netrc
Perhatikan bahwa pada Windows, file ini harus disebut _netrc
, dan anda mungkin perlu untuk menentukan %RUMAH% variabel lingkungan - untuk rincian lebih lanjut lihat:
Anda juga dapat memiliki Git menyimpan kredensial anda secara permanen menggunakan berikut:
git config credential.helper store
Catatan: Sementara ini nyaman, Git akan menyimpan kredensial anda dalam teks yang jelas dalam file lokal (.git-kredensial) di bawah direktori proyek anda (lihat di bawah untuk "rumah" direktori). Jika anda don't seperti ini, hapus file ini dan beralih untuk menggunakan cache pilihan.
Jika anda ingin Git untuk melanjutkan untuk meminta anda untuk kredensial setiap waktu yang dibutuhkan untuk terhubung ke remote repository, anda dapat menjalankan perintah ini:
git config --unset credential.helper
Untuk menyimpan password dalam .git-kredensial
di %RUMAH%
direktori sebagai lawan untuk proyek direktori: gunakan - global
bendera
git config --global credential.helper store
Menyimpan password untuk sebuah repositori Git HTTPS URL ini dimungkinkan dengan ~/.netrc
(Unix) atau %RUMAH%/_netrc
(perhatikan _
) pada Windows.
Tapi: file Yang akan menyimpan password dalam bentuk teks biasa.
Solusi: Mengenkripsi file dengan GPG (GNU Privacy Guard), dan membuat Git mendekripsi itu setiap kali ia membutuhkan password (untuk mendorong
/menarik
/mengambil
/clone
operasi).
Catatan: dengan Git 2.18 (Q2 2018), anda sekarang dapat menyesuaikan GPG digunakan untuk mendekripsi .netrc
file.
Lihat melakukan 786ef50, melakukan f07eeed (12 Mei 2018) oleh Luis Marsano (`).
(Digabung dengan Junio C Hamano -- gitster
-- di melakukan 017b7c5, 30 Mei 2018)
git-kredensial-netrc
: menerimagpg
pilihan
git-kredensial-netrc
adalah hardcoded untuk mendekripsi dengan 'gpg
' terlepas dari dengan gpg.program pilihan. Ini adalah masalah pada distro linux seperti Debian bahwa panggilan modern GnuPG sesuatu yang lain, seperti 'gpg2
'
Dengan Windows:
(Git memiliki gpg.exe
dalam distribusi, tetapi menggunakan full GPG instalasi termasuk gpg-agent.exe
, yang akan mengingat kata sandi anda yang berhubungan dengan GPG key.)
gpg4Win Lite
, minimum gnupg command-line interface (mengambil paling baru gpg4win-vanilla-2.X.Y-betaZZ.exe
), dan lengkapi JALAN anda dengan GPG direktori instalasi:set PATH=%PATH%:C:\path\to\gpg copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe
(Catatan 'copy
' perintah: Git akan perlu Bash script untuk mengeksekusi perintah 'gpg
'. Sejak gpg4win-vanilla-2
dilengkapi gpg2.exe
, anda perlu untuk menduplikasi itu.)
gpgp --import aKey
gpg --gen-key
(Pastikan untuk menempatkan kata kunci ke kunci itu.)
Pasang kredensial helper script di direktori dalam %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
(Ya, ini adalah sebuah Bash script, tapi ini akan bekerja pada Windows karena akan disebut oleh Git.)
mesin a_server.corp.com login a_login password a_password protokol https
mesin a_server2.corp.com login a_login2 password a_password2 protokol https
(Don't melupakan 'protokol
' bagian: 'http
' atau 'https
' tergantung pada URL yang akan anda gunakan.)
gpg -e -r a_recipient _netrc
(Anda sekarang dapat hapus the _netrc
file, hanya menjaga _netrc.gpg
dienkripsi satu.)
git config --lokal credential.pembantu "netrc -f C:/path/to/_netrc.gpg -v"
(Catatan '/
': C:\path\to...
tidak't bekerja pada semua.) (Anda dapat menggunakan di pertama-v -d
untuk melihat apa yang terjadi.)
Mulai sekarang, setiap perintah Git menggunakan HTTP(S) URL yang memerlukan otentikasi akan mendekripsi yang _netrc.gpg
file dan menggunakan login/password berhubungan ke server anda menghubungi.
Pertama kalinya, GPG akan meminta anda untuk frasa sandi anda GPG key untuk mendekripsi file.
Lain kali, gpg-agen diluncurkan secara otomatis pertama GPG panggilan akan memberikan kata sandi untuk anda.
Dengan cara itu, anda dapat menghafal beberapa Url/login/password dalam satu file, dan harus disimpan pada disk anda dienkripsi.
Saya merasa lebih nyaman dari "cache" pembantu", di mana anda perlu untuk mengingat dan jenis (sekali per sesi) password yang berbeda untuk setiap layanan remote, untuk kata sandi yang akan di-cache dalam memori.
Ada's mudah, cara kuno untuk menyimpan kredensial pengguna di HTTPS URL:
https://user:[email protected]/...
Anda dapat mengubah URL dengan git remote set-url <remote repo> <URL>
Yang jelas kelemahan pendekatan ini adalah bahwa anda harus menyimpan password dalam bentuk teks biasa. Anda masih bisa hanya memasukkan nama pengguna (https://[email protected]/...
) yang setidaknya akan menghemat setengah kerumitan.
Anda mungkin lebih memilih untuk beralih ke SSH atau menggunakan GitHub perangkat lunak klien.
Anda hanya dapat menggunakan
git config credential.helper store
Ketika anda memasukkan password saat berikutnya dengan menarik atau mendorong, itu akan disimpan dalam file .git-kredensial sebagai teks biasa (sedikit tidak aman, tapi hanya memasukkannya ke dalam folder yang dilindungi).
Dan yang's ini, seperti yang dinyatakan pada halaman ini:
Menggunakan credential store.
Untuk Git 2.11+ di OS X dan Linux, menggunakan Git's dibangun di credential toko:
git config --global credential.helper libsecret
Untuk msysgit 1.7.9+ di Windows:
git config --global credential.helper wincred
Untuk Git 1.7.9+ pada OS X menggunakan:
git config --global credential.helper osxkeychain
Cukup memasukkan kredensial login sebagai bagian dari URL:
git remote rm origin
git remote add origin https://username:[email protected]/path/to/repo.git
Catatan: saya tidak merekomendasikan metode ini, tetapi jika anda berada di terburu-buru dan tidak ada yang lain bekerja, anda dapat menggunakan metode ini.
Itu't segera jelas bagi saya bahwa saya perlu untuk men-download penolong pertama! Saya menemukan credential.pembantu download di Atlassian's secara Permanen otentikasi dengan Git repositori.
Quote:
Ikuti langkah-langkah berikut jika anda ingin menggunakan Git dengan credential caching pada OS X:
Download biner git-kredensial-osxkeychain.
Jalankan perintah berikut untuk memastikan binary executable:
chmod a+x git-credential-osxkeychain
Meletakkannya di direktori /usr/local/bin
.
Jalankan perintah di bawah ini:
git config --global credential.helper osxkeychain
Untuk Windows, anda dapat menggunakan Git Credential Manager (GCM) plugin. Saat ini dikelola oleh Microsoft. Hal yang baik adalah bahwa hal itu menghemat password di Windows Credential Toko, bukan sebagai teks biasa.
Ada installer di halaman rilis proyek. Ini juga akan menginstal versi resmi dari Git untuk Windows dengan credential manager built-in. Hal ini memungkinkan dua-faktor otentikasi untuk GitHub (dan server lainnya). Dan memiliki antarmuka grafis untuk awalnya masuk.
Untuk Cygwin pengguna (atau pengguna yang sudah menggunakan resmi Git untuk Windows), anda mungkin lebih suka manual menginstal. Download paket zip dari rilis halaman. Ekstrak paket, dan kemudian jalankan install.cmd
file. Ini akan menginstal untuk anda ~/bin
folder. (Pastikan anda ~/bin
direktori di JALAN anda.) Anda kemudian mengkonfigurasi menggunakan perintah ini:
git config --global credential.helper manager
Git kemudian akan menjalankan git-credential-manager.exe
ketika melakukan otentikasi ke server apapun.
Jika anda don't ingin menyimpan password anda dalam plaintext seperti kata Mark, anda dapat menggunakan GitHub URL untuk mengambil dari yang anda lakukan untuk mendorong. Dalam file konfigurasi anda, di bawah [remote "asal"]
:
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
Itu masih akan meminta password ketika anda menekan, tapi tidak ketika anda mengambil, setidaknya untuk proyek open source.
Anda dapat membuat anda sendiri pribadi token API (OAuth) dan menggunakannya dengan cara yang sama seperti yang anda akan menggunakan anda normal kredensial (di: /pengaturan/token
). Misalnya:
git remote add fork https://[email protected]/foo/bar
git push fork
.netrc
Metode lain adalah untuk mengkonfigurasi user/password di ~/.netrc
(_netrc
pada Windows), misalnya
machine github.com
login USERNAME
password PASSWORD
Untuk HTTPS, tambahkan baris:
protocol https
Untuk cache anda GitHub password di Git ketika menggunakan HTTPS, anda dapat menggunakan kredensial pembantu untuk memberitahu Git untuk mengingat GitHub username dan password setiap kali berbicara ke GitHub.
git config --global credential.pembantu osxkeychain
(osxkeychain penolong
diperlukan),git config --global credential.pembantu wincred
git config --global credential.pembantu cache
Terkait:
Setelah anda clone repository repo
, anda dapat mengedit repo/.git/config
dan tambahkan beberapa konfigurasi seperti di bawah ini:
[user]
name = you_name
password = you_password
[credential]
helper = store
Kemudian anda memenangkan't akan diminta untuk username
dan password
lagi.
Aku tahu ini bukan solusi yang aman, tapi kadang-kadang anda hanya perlu sebuah solusi yang sederhana - tanpa menginstal apa pun. Dan sejak penolong = toko tidak bekerja untuk saya, saya membuat sebuah boneka helper:
Membuat script dan memasukkannya ke dalam pengguna bin folder, di sini bernama credfake, script ini akan memberikan username dan password anda:
#!/bin/bash
while read line
do
echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345
membuatnya executable:
chmod u+x /home/mahuser/bin/credfake
kemudian konfigurasikan di git:
git config --global credential.helper /home/mahuser/bin/credfake
(atau menggunakannya tanpa --global untuk satu repo saja)
dan - voilá - git akan menggunakan user + password.
Otentikasi token yang harus digunakan sebagai pengganti password akun. Pergi ke GitHub pengaturan/aplikasi dan kemudian membuat personal access token. Token dapat digunakan dengan cara yang sama password yang digunakan.
Token ini dimaksudkan untuk memungkinkan pengguna untuk tidak menggunakan password account untuk pekerjaan proyek. Hanya menggunakan password ketika melakukan pekerjaan administrasi, seperti membuat token baru atau mencabut tua token.
Bukan token atau password yang memberikan pengguna seluruh akses ke akun GitHub, sebuah proyek tertentu penyebaran kunci dapat digunakan untuk memberikan akses ke satu proyek repositori. Git proyek dapat dikonfigurasi untuk menggunakan kunci yang berbeda dalam langkah-langkah berikut ketika anda masih dapat mengakses lainnya Git akun atau proyek-proyek dengan normal credential:
Host
, IdentityFile
untuk penyebaran kunci, mungkin UserKnownHostsFile
, dan mungkin User
(meskipun saya pikir anda don't perlu).ssh -F /path/ke/direktori/config $*
GIT_SSH=/path/ke/direktori/wrapper
di depan anda normal Git perintah. Di sini git remote
(asal) harus menggunakan [email protected]:user/project.git
format.Hal ini lebih baik untuk menggunakan kredensial untuk keamanan, namun anda dapat menyimpannya untuk beberapa waktu menggunakan cache:
git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'
Kredensial anda akan disimpan selama 3600 detik.
Hal-hal yang sedikit berbeda jika anda're menggunakan dua-faktor otentikasi seperti saya. Karena saya didn't menemukan jawaban yang baik di tempat lain, saya'll stick satu ini, jadi mungkin aku dapat menemukannya nanti.
Jika anda're menggunakan otentikasi dua faktor, kemudian menentukan username/password tidak't bahkan pekerjaan - anda mendapatkan akses ditolak. Tapi anda dapat menggunakan aplikasi token akses dan penggunaan Git's credential penolong untuk cache untuk anda. Berikut ini adalah bersangkutan link:
Dan saya don't ingat di mana saya melihat ini, tapi bila anda're diminta untuk username - yang's di mana anda memasukkan aplikasi access token. Kemudian biarkan password kosong. Bekerja pada Mac saya.
Biasanya anda memiliki remote URL, sesuatu seperti ini,
git remote -v
origin https://gitlab.com/username/Repo.git (fetch)
origin https://gitlab.com/username/Repo.git (push)
Jika anda ingin melewatkan username dan password saat menggunakan git push`, coba ini:
git remote set-url origin https://username:[email protected]/username/Repo.git
I've hanya menambahkan URL yang sama (dengan rincian pengguna seperti password) ke asal.
CATATAN: Itu doesn't bekerja jika username email Id.
git remote -v
origin https://username:[email protected]/username/Repo.git (fetch)
origin https://username:[email protected]/username/Repo.git (push)