Apakah ada cara untuk cache GitHub mandat untuk mendorong melakukan?

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?

Mengomentari pertanyaan (5)
Larutan

Dengan Git versi 1.7.9 dan kemudian

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 Git versi sebelum 1.7.9

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:password@github.com/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:password@github.com/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.

Dengan setiap versi Git (nah, sejak versi 0.99)

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  login  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:

Komentar (26)

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
Komentar (11)

TLDR; Menggunakan netrc berkas dapat dienkripsi dengan Git 1.8.3+.

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: menerima gpg 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'


Langkah-demi-Langkah petunjuk untuk Windows

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.)

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.)

  • Membuat atau mengimpor kunci GPG, dan kepercayaan itu:

gpgp --import aKey

atau

gpg --gen-key

(Pastikan untuk menempatkan kata kunci ke kunci itu.)

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.)

  • Membuat _netrc file dalam bentuk teks

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.)

  • Mengenkripsi file tersebut:

gpg -e -r a_recipient _netrc

(Anda sekarang dapat hapus the _netrc file, hanya menjaga _netrc.gpg dienkripsi satu.)

  • Penggunaan yang dienkripsi file:

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.

Komentar (3)

Ada's mudah, cara kuno untuk menyimpan kredensial pengguna di HTTPS URL:

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

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://user@github.com/...) yang setidaknya akan menghemat setengah kerumitan.

Anda mungkin lebih memilih untuk beralih ke SSH atau menggunakan GitHub perangkat lunak klien.

Komentar (1)

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:

git-kredensial-toko

Komentar (1)

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
Komentar (7)

Cukup memasukkan kredensial login sebagai bagian dari URL:

git remote rm origin
git remote add origin https://username:mypassword@github.com/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.

Komentar (6)

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
Komentar (0)

Pada GNU/Linux setup,~/.netrc bekerja cukup baik juga:

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

Itu mungkin tergantung pada jaringan perpustakaan Git menggunakan HTTPS transportasi.

Komentar (2)

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.

Komentar (1)

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 = git@github.com:you/projectName.git

Itu masih akan meminta password ketika anda menekan, tapi tidak ketika anda mengambil, setidaknya untuk proyek open source.

Komentar (0)

OAuth

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://4UTHT0KEN@github.com/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

Mandat pembantu

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.

  • Mac: git config --global credential.pembantu osxkeychain (osxkeychain penolong diperlukan),
  • Windows: git config --global credential.pembantu wincred
  • Linux dan lain-lain: git config --global credential.pembantu cache

Terkait:

Komentar (0)

Anda dapat menggunakan kredensial pembantu.

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

dimana x adalah jumlah detik.

Komentar (4)

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.

Komentar (3)

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.

Komentar (1)

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:

  1. Menulis SSH file konfigurasi yang berisi Host, IdentityFile untuk penyebaran kunci, mungkin UserKnownHostsFile, dan mungkin User (meskipun saya pikir anda don't perlu).
  2. Menulis SSH wrapper shell script yang hampir ssh -F /path/ke/direktori/config $*
  3. Tambahkan GIT_SSH=/path/ke/direktori/wrapper di depan anda normal Git perintah. Di sini git remote (asal) harus menggunakan git@github.com:user/project.git format.
Komentar (0)

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.

Komentar (5)

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.

Komentar (1)

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:password@gitlab.com/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:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)
Komentar (0)

Ini bekerja untuk saya, saya'm menggunakan Windows 10

git config --global credential.helper wincred
Komentar (0)