Apakah ada cara untuk menembolok kredensial GitHub untuk mendorong komitmen?

1867

Saya baru-baru ini beralih ke sinkronisasi repositori saya ke https: // di GitHub (karena masalah firewall), dan meminta kata sandi setiap waktu.

Apakah ada cara untuk men-cache kredensial, alih-alih mengautentikasi setiap kali itu git push?

Zepplock
sumber
1
Lihat juga superuser.com/questions/199507/...
Kolonel Panic
2
Anda sekarang dapat menggunakan pembantu kredensial untuk mengenkripsi _netrcfile yang berisi kredensial Anda. Lihat jawaban saya di bawah ini . Saya menemukan bahwa lebih aman dari git-credential-winstore.exe(cache memori) yang agak buggy pada Windows.
VonC
git-credential-winstorebekerja yang terbaik untuk Windows. Kereta apa? Menyiapkan ssh adalah opsi yang lebih disukai, meskipun saya telah melakukannya beberapa kali, itu jauh lebih rentan kesalahan dan kadang-kadang hanya tidak berfungsi ketika Anda harus terhubung ke beberapa host.
Bron Davies
2
Dengan "sertifikat SSH" Saya menganggap Anda bermaksud "kunci pribadi SSH."
Michael Mior

Jawaban:

2369

Dengan Git versi 1.7.9 dan yang lebih baru

Sejak Git 1.7.9 (dirilis pada akhir Januari 2012), ada mekanisme rapi di Git untuk menghindari keharusan mengetikkan kata sandi Anda sepanjang waktu untuk HTTP / HTTPS, yang disebut bantuan kredensial . (Terima kasih kepada dazonic karena menunjukkan fitur baru ini di komentar di bawah.)

Dengan Git 1.7.9 atau lebih baru, Anda bisa menggunakan salah satu dari pembantu kredensial berikut:

git config --global credential.helper cache

... yang memberitahu Git untuk menyimpan kata sandi Anda di-cache dalam memori selama (secara default) 15 menit. Anda dapat mengatur batas waktu lebih lama dengan:

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

(Contoh itu disarankan di halaman bantuan GitHub untuk Linux .) Anda juga dapat menyimpan kredensial Anda secara permanen jika diinginkan, lihat jawaban lain di bawah ini.

Bantuan GitHub juga menunjukkan bahwa jika Anda menggunakan Mac OS X dan menggunakan Homebrew untuk menginstal Git, Anda dapat menggunakan keystore Mac OS X asli dengan:

git config --global credential.helper osxkeychain

Untuk Windows, ada penolong yang disebut Git Credential Manager untuk Windows atau diincar 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 (atau implementasi keyring lainnya seperti KWallet).

Dengan versi Git sebelum 1.7.9

Dengan versi Git sebelum 1.7.9, opsi yang lebih aman ini tidak tersedia, dan Anda harus mengubah URL yang origindigunakan remote Anda untuk memasukkan kata sandi dengan cara ini:

https://you:[email protected]/you/example.git

... dengan kata lain dengan :passwordsetelah nama pengguna dan sebelum @.

Anda dapat mengatur URL baru untuk originremote Anda dengan:

git config remote.origin.url https://you:[email protected]/you/example.git

Pastikan Anda menggunakannya https, dan Anda harus sadar bahwa jika Anda melakukan ini, kata sandi GitHub Anda akan disimpan dalam plaintext di .gitdirektori Anda , yang jelas tidak diinginkan.

Dengan versi Git apa pun (well, sejak versi 0.99)

Pendekatan alternatif adalah dengan memasukkan nama pengguna dan kata sandi Anda di ~/.netrcfile Anda , meskipun, seperti halnya menyimpan kata sandi di URL jarak jauh, ini berarti bahwa kata sandi Anda akan disimpan pada disk dalam teks biasa dan dengan demikian kurang aman dan tidak direkomendasikan. Namun, jika Anda ingin mengambil pendekatan ini, tambahkan baris berikut ke Anda ~/.netrc:

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

... mengganti <hostname>dengan nama host server, dan <username>dan <password>dengan nama pengguna dan kata sandi Anda. Ingat juga untuk mengatur izin sistem file terbatas pada file itu:

chmod 600 ~/.netrc

Perhatikan bahwa pada Windows, file ini harus dipanggil _netrc, dan Anda mungkin perlu mendefinisikan variabel lingkungan% HOME% - untuk lebih jelasnya lihat:

Mark Longair
sumber
72
Jangan menyimpan kata sandi Anda dalam teks biasa. Pada Git 1.7.9 Anda dapat menggunakan bantuan kredensial. git config --global credential.helper osxkeychainpada OS X. Untuk OS lainnya, lihat help.github.com/articles/set-up-git
dazonic
6
FWIW, gantungan kunci osx adalah bagian dari kode sumber GIT dasar, ini bukan komponen eksklusif dari Brew atau MacPorts atau apa pun rasanya bulan ini. Dan Anda bahkan tidak perlu membangun git dari awal - cukup cd contrib / credential / osxkeychain / dan jalankan make.
synthesizerpatel
2
Dengan otentikasi dua faktor, Anda harus menggunakan apa yang disebut github sebagai Token Akses Person . Bahkan Anda harus selalu menggunakannya, karena tidak seperti kata sandi, Anda dapat mengontrol akses yang diberikannya. Cukup ganti kata sandi di url sehingga Anda berakhir dengan https://username:[email protected]/username/project.git. Itu membuat kata sandi teks biasa yang disimpan di disk hampir cukup aman untuk digunakan.
Russell Stuart
12
git config --global credential.helper cachetidak bekerja di windows: stackoverflow.com/questions/11693074/... gunakan gitcredentialstore di Windows dan senang
Sebastian J.
8
Adakah cara untuk mengatur batas waktu ini hingga tak terbatas?
sudo
720

Anda juga dapat meminta Git menyimpan kredensial Anda secara permanen menggunakan yang berikut:

git config credential.helper store

Catatan: Meskipun ini mudah, Git akan menyimpan kredensial Anda dalam teks yang jelas dalam file lokal (.git-kredensial) di bawah direktori proyek Anda (lihat di bawah untuk direktori "home"). Jika Anda tidak suka ini, hapus file ini dan alihkan untuk menggunakan opsi cache.

Jika Anda ingin Git melanjutkan untuk meminta kredensial setiap kali perlu terhubung ke repositori jarak jauh, Anda dapat menjalankan perintah ini:

git config --unset credential.helper

Untuk menyimpan kata sandi di .git-credentials dalam %HOME%direktori Anda sebagai lawan dari direktori proyek: gunakan --globalbendera

git config --global credential.helper store
Giri Alwar
sumber
7
Pada Windows, Anda dapat mengunduh utilitas pembantu mengonfigurasikan hal-hal untuk menyimpan versi terenkripsi kata sandi GIT Anda di Windows Creditial Store, lihat confluence.atlassian.com/display/STASH/…
Contango
76
Saya menemukan bahwa saya harus menentukan - global atau akan mencoba untuk menyimpan pengaturan di repositori saat ini:git config --global credential.helper store
Brian Gordon
6
Mengapa melakukan cache alih-alih menyimpan secara permanen? Berbagi komputer atau sesuatu?
Michael J. Calkins
2
@BrianGordon Saya menggunakan GIT 1.9.5 di Windows, dan --globalflag sudah mubazir. Bahkan tanpa tanda ini, file kredensial telah dibuat dalam %USER_HOME%direktori.
jFrenetic
2
jika tidak menyimpan dalam teks biasa, apa itu dilindungi? Kata sandi Anda? Bukankah itu kemudian harus meminta Anda kata sandi admin Anda ketika Anda terhubung ke git? Tidak harus memasukkan kata sandi untuk mendapatkan kata sandi lain sedikit aneh?
Cruncher
101

TLDR; Gunakan file netrc terenkripsi dengan Git 1.8.3+ .

Menyimpan kata sandi untuk URL HTTPS repositori Git dimungkinkan dengan ~/.netrc(Unix) atau %HOME%/_netrc(perhatikan _) pada Windows.

Tetapi : File itu akan menyimpan kata sandi Anda dalam teks biasa.

Solusi : Enkripsi file itu dengan GPG (GNU Privacy Guard) , dan buat Git mendekripsi file itu setiap kali membutuhkan kata sandi (untuk push/ pull/ fetch/ cloneoperasi).


Catatan: dengan Git 2.18 (Q2 2018), Anda sekarang dapat menyesuaikan GPG yang digunakan untuk mendekripsi terenkripsi .netrc file .

Lihat commit 786ef50 , commit f07eeed (12 Mei 2018) oleh Luis Marsano (``) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 017b7c5 , 30 Mei 2018)

git-credential-netrc: terima gpg opsi

git-credential-netrctelah hardcoded untuk mendekripsi dengan ' gpg' terlepas dari opsi gpg.program.
Ini merupakan masalah pada distribusi seperti Debian yang menyebut GnuPG modern sesuatu yang lain, seperti ' gpg2'


Petunjuk langkah demi langkah untuk Windows

Dengan Windows:

(Git memiliki gpg.exedistribusi, tetapi menggunakan instalasi GPG lengkap termasuk gpg-agent.exe, yang akan menghafal frasa sandi Anda yang terkait dengan kunci GPG Anda.)

  • Instal gpg4Win Lite, antarmuka baris perintah gnupg minimum (ambil yang terbarugpg4win-vanilla-2.X.Y-betaZZ.exe ), dan lengkapi PATH Anda dengan direktori instalasi GPG:

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

(Catat perintah ' copy': Git akan membutuhkan skrip Bash untuk menjalankan perintah ' gpg'. Sejak itu gpg4win-vanilla-2disertakangpg2.exe , Anda perlu menduplikatnya.)

  • Buat atau impor kunci GPG, dan percayai:

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

(Pastikan untuk memasukkan frasa sandi ke kunci itu.)

  • Percayai kunci itu

  • Instal skrip pembantu kredensial di direktori di dalam Anda %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

(Hati-hati: skrip diganti namanya di Git 2.25.x / 2.26, lihat di bawah)

(Ya, ini adalah skrip Bash, tetapi ini akan berfungsi pada Windows karena akan dipanggil oleh Git.)

  • Buat file _netrc dalam teks yang jelas

    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

(Jangan lupa bagian ' protocol': ' http' atau ' https' tergantung pada URL yang akan Anda gunakan.)

  • Enkripsi file itu:

    gpg -e -r a_recipient _netrc

(Sekarang Anda dapat menghapus satu _netrcberkas, hanya menjaga _netrc.gpgsatu dienkripsi.)

  • Gunakan file yang dienkripsi:

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

(Catat ' /': C:\path\to...tidak akan berfungsi sama sekali.) (Anda dapat menggunakan pada awalnya -v -duntuk melihat apa yang sedang terjadi.)

Mulai sekarang, perintah Git yang menggunakan URL HTTP (S) yang memerlukan otentikasi akan mendekripsi _netrc.gpgfile itu dan menggunakan login / kata sandi yang terkait dengan server yang Anda hubungi. Pertama kali, GPG akan meminta Anda untuk frasa sandi kunci GPG Anda, untuk mendekripsi file. Di lain waktu, agen gpg yang diluncurkan secara otomatis oleh panggilan GPG pertama akan memberikan frasa sandi itu untuk Anda.

Dengan begitu, Anda dapat mengingat beberapa URL / login / kata sandi dalam satu file, dan menyimpannya di disk Anda dienkripsi.
Saya merasa lebih nyaman daripada "cache" helper ", di mana Anda perlu mengingat dan mengetik (satu kali per sesi) kata sandi yang berbeda untuk setiap layanan jarak jauh Anda, untuk kata sandi yang akan di-cache dalam memori.


Dengan Git 2.26 (Q1 2020), sampel helper kredensial untuk menggunakan .netrctelah diperbarui untuk bekerja di luar kotak. Lihat tambalan / diskusi .

Lihat komit 6579d93 , komit 1c78c78 (20 Des 2019) oleh Denton Liu ( Denton-L) .
(Digabung oleh Junio ​​C Hamano - gitster- dalam komit 1fd27f8 , 25 Des 2019)

contrib/credential/netrc: buat PERL_PATH dikonfigurasi

Ditandatangani oleh: Denton Liu

Jalur shebang untuk penerjemah Perl dalam git-credential-netrchardcoded.
Namun, beberapa pengguna mungkin menempatkannya di lokasi yang berbeda dan karenanya, harus mengedit skrip secara manual.

Tambahkan .perlawalan ke skrip untuk menyatakannya sebagai templat dan abaikan versi yang dihasilkan.
Tambahkan Makefilesehingga dihasilkan git-credential-netrcdarigit-credential-netrc.perl , seperti script lainnya Perl.

Resep Makefile dicuri tanpa malu-malu contrib/mw-to-git/Makefile.

Dan:

Dengan 2.26 (Q1 2020), Sampel pembantu kredensial untuk menggunakan .netrc telah diperbarui agar berfungsi di luar kotak.

Lihat komit 6579d93 , komit 1c78c78 (20 Des 2019) oleh Denton Liu ( Denton-L) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit 1fd27f8 , 25 Des 2019)

contrib/credential/netrc: bekerja di luar repo

Ditandatangani oleh: Denton Liu

Saat ini, git-credential-netrctidak berfungsi di luar repositori git. Gagal dengan kesalahan berikut:

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

Tidak ada alasan sebenarnya mengapa perlu berada dalam repositori. Pembantu kredensial harus dapat bekerja dengan baik di luar repositori juga.

Panggil versi non-mandiri config()sehingga git-credential-netrctidak perlu lagi dijalankan dalam repositori.

Jeff King ( peff) menambahkan:

Saya berasumsi Anda menggunakan gpg-terenkripsi netrc(jika tidak, Anda mungkin harus menggunakan credential-store).
Untuk akses kata sandi "read-only", saya menemukan kombinasi passdengan konfigurasi seperti ini sedikit lebih baik:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"
VONC
sumber
1
mencoba hal yang sama di linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..dan saya mendapatkan "git: 'credential-netrc' bukan perintah git. lihat 'git --help' "
sunny
4
@sunny Itulah gunanya curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc: Anda perlu menyalin di git-credential-netrcmana saja di path Anda ( $PATH), agar git dapat memanggil ' credential-netrc'.
VonC
Yah, _netrcitu tidak bekerja untuk saya di Windows 7PC, tetapi .netrcbekerja untuk youtube-dl dengan --netrcargumen yang diteruskan ke sana.
Iulian Onofrei
@VonC URL saat ini tampaknya https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(perpipaan dalam tujuh tahun kemudian 😉)
Gwyneth Llewelyn
1
@ GwynethLlewelyn Terima kasih. Saya telah mengedit jawaban sesuai dengan itu. Jangan ragu untuk mengeditnya sendiri jika Anda melihat informasi usang lainnya.
VonC
43

Ada cara mudah dan kuno untuk menyimpan kredensial pengguna di URL HTTPS:

https://user:[email protected]/...

Anda dapat mengubah URL dengan git remote set-url <remote-repo> <URL>

Kelemahan yang jelas dari pendekatan itu adalah Anda harus menyimpan kata sandi dalam teks biasa. Anda masih bisa memasukkan nama pengguna ( https://[email protected]/...) yang setidaknya akan menyelamatkan Anda dari setengah kerumitan.

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

berjalan cepat
sumber
2
Nama pengguna / kata sandi mungkin perlu disandikan, lihat stackoverflow.com/a/34611311/3906760
MrTux
43

Gunakan toko kredensial.

Untuk Git 2.11+ di OS X dan Linux , gunakan toko kredensial bawaan Git :

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

git config --global credential.helper osxkeychain
roo2
sumber
2
Saya yakin ini adalah cara untuk pergi, tapi sayangnya saya mendapatkan kesalahan:git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
codepleb
1
Terima kasih, tapi entah bagaimana saya mendapatkan kesalahan yang sama. Apakah saya melakukan sesuatu yang salah? Saya mengetik perintah dan tidak ada yang terjadi. Segera setelah saya mendorong, saya diminta kredensial, yang saya berhasil masukkan, tetapi saya mendapatkan kesalahan, bahwa itu bukan perintah git setelah melakukan itu.
codepleb
2
Sebelum libsecret bekerja di Linux, Anda perlu melakukan langkah-langkah ini: stackoverflow.com/a/40312117/775800
Lavamantis
1
Satu hal lagi - jika Anda mengaktifkan 2FA di Github, kata sandi Anda tidak akan berfungsi. Tetapi Anda dapat membuat token akses pribadi di halaman "Pengaturan" Github Anda dan token itu berfungsi sebagai kata sandi Anda. github.com/github/hub/issues/822
Lavamantis
3
Masalah Keamanan: manajer kredensial Windows membuat kata sandi plaintext Anda dapat diakses oleh siapa saja yang masuk ke akun Windows Anda. Yang perlu mereka lakukan adalah mengirim permintaan ke manajer kredensial seperti printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( lebih detail di sini ). Anda harus selalu menggunakan token akses pribadi dengan ini, dan tentu saja menggunakan 2FA pada akun GitHub Anda.
cjs
40

Anda bisa menggunakannya

git config credential.helper store

Ketika Anda memasukkan kata sandi lain kali dengan menarik atau mendorong, kata sandi itu akan disimpan dalam file .git-kredensial sebagai teks biasa (sedikit tidak aman, tetapi hanya memasukkannya ke folder yang dilindungi).

Dan itu saja, sebagaimana dinyatakan di halaman ini:

git-credential-store

sgoran
sumber
3
Untuk Git untuk Windows 2.7.3 (Maret 2016): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 , yang akan menjadi git config credential.helper managersebaliknya
VonC
23

Tidak segera jelas bagi saya bahwa saya harus mengunduh helper terlebih dahulu! Saya menemukan unduhan credential.helper di Atlassian's Permanent autentikasi dengan repositori Git .

Mengutip:

Ikuti langkah-langkah ini jika Anda ingin menggunakan Git dengan caching kredensial di OS X:

Unduh binary git-credential-osxkeychain.

Jalankan perintah di bawah ini untuk memastikan biner dapat dieksekusi:

chmod a+x git-credential-osxkeychain

Masukkan ke dalam direktori /usr/local/bin.

Jalankan perintah di bawah ini:

git config --global credential.helper osxkeychain
Ben
sumber
23

Cukup sertakan kredensial masuk 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 terburu-buru dan tidak ada yang berhasil, Anda dapat menggunakan metode ini.

Tarun Gupta
sumber
12
itu akan berhasil Anda harus melarikan diri @ dengan% 40 di id email Anda
Tarun Gupta
Bagaimana jika kita memiliki '+' di id email? Saya mencoba melarikan diri yang sama tetapi dorongan mengatakan 'repo tidak ditemukan'
killjoy
4
miliki% 2B sebagai ganti +
Tarun Gupta
Menyimpan kata sandi dalam teks biasa dan mudah diakses mungkin bukan solusi yang optimal.
mengurangi aktivitas
20

Pada pengaturan GNU / Linux, a ~ / .netrc bekerja dengan sangat baik:

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

Ini mungkin tergantung pada perpustakaan jaringan yang digunakan Git untuk transportasi HTTPS .

helloPiers
sumber
4
Pastikan juga chmod 0600 ~/.netrc.
poolie
Hanya ingin meninggalkan tautan di sini ke halaman manual Ubuntu netrc . Saya perlu membuatnya untuk pengguna lain (/home/git/.netrc) kemudian mengubah kepemilikan ke pengguna itu.
zacharydl
17

Untuk Windows Anda dapat menggunakan plugin Git Credential Manager (GCM). Saat ini dikelola oleh Microsoft. Yang menyenangkan adalah ia menyimpan kata sandi di Windows Credential Store, bukan sebagai teks biasa.

Ada penginstal di halaman rilis proyek. Ini juga akan menginstal versi resmi Git untuk Windows dengan built-in pengelola kredensial. Ini memungkinkan otentikasi dua faktor untuk GitHub (dan server lain). Dan memiliki antarmuka grafis untuk awalnya masuk.

Untuk pengguna Cygwin (atau pengguna yang sudah menggunakan Git resmi untuk Windows), Anda mungkin lebih suka menginstal manual. Unduh paket zip dari halaman rilis . Ekstrak paket, dan kemudian jalankan install.cmdfile. Ini akan dipasang ke ~/binfolder Anda . (Pastikan ~/bindirektori Anda ada di PATH Anda.) Anda kemudian mengkonfigurasinya menggunakan perintah ini:

git config --global credential.helper manager

Git kemudian akan menjalankan git-credential-manager.exeketika mengautentikasi ke server mana pun.

Nadeem Khedr
sumber
3
Siapa pun yang masuk ke akun Anda memang memiliki akses mudah ke teks sandi. Yang perlu mereka lakukan adalah mengirim permintaan ke manajer kredensial seperti printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( lebih detail di sini ). Anda harus selalu menggunakan token akses pribadi dengan ini, dan tentu saja menggunakan 2FA pada akun GitHub Anda.
cjs
13

Jika Anda tidak ingin menyimpan kata sandi dalam plaintext seperti kata Mark, Anda dapat menggunakan URL GitHub yang berbeda untuk mengambil daripada yang Anda lakukan untuk mendorong. Di file konfigurasi Anda, di bawah [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git

Itu masih akan meminta kata sandi saat Anda menekan, tetapi tidak ketika Anda mengambil, setidaknya untuk proyek sumber terbuka.

MatrixFrog
sumber
12

OAuth

Anda dapat membuat token API pribadi Anda sendiri ( OAuth ) dan menggunakannya dengan cara yang sama seperti Anda akan menggunakan kredensial normal Anda (di:) /settings/tokens. Sebagai contoh:

git remote add fork https://[email protected]/foo/bar
git push fork

.netrc

Metode lain adalah mengonfigurasi pengguna / kata sandi Anda di ~/.netrc( _netrcpada Windows), mis

machine github.com
login USERNAME
password PASSWORD

Untuk HTTPS, tambahkan baris tambahan:

protocol https

Pembantu kredensial

Untuk men-cache kata sandi GitHub Anda di Git saat menggunakan HTTPS, Anda dapat menggunakan pembantu kredensial untuk memberi tahu Git untuk mengingat nama pengguna dan kata sandi GitHub Anda setiap kali berbicara dengan GitHub.

  • Mac: git config --global credential.helper osxkeychain( osxkeychain helperwajib),
  • Windows: git config --global credential.helper wincred
  • Linux dan lainnya: git config --global credential.helper cache

Terkait:

kenorb
sumber
10

Anda dapat menggunakan bantuan kredensial.

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

di mana xjumlah detiknya

Charan
sumber
7
Itu adalah jumlah detik ... Beberapa orang genius memperbaruinya sebagai milidetik dan semua orang menyetujuinya tanpa memeriksa. Tolong jangan menyesatkan orang jika Anda tidak tahu jawabannya. Terima kasih!
Charan
Bisakah Anda memberikan tautan ke tempat di mana store, cachedan hal-hal umum lainnya dicantumkan dan dijelaskan?
Notinlist
3
Mau menyebutkan fakta bahwa ini tidak berguna kecuali Anda memanggil perintah khusus lain untuk menggunakan 'cache' sebagai manajer terlebih dahulu? Hal ini sangat samar, semua jawaban ini tidak lengkap, dan tidak ada yang berfungsi. Sangat membuat frustrasi. Lihat ini sebagai gantinya: stackoverflow.com/a/24800870/88409
Triynko
10

Setelah Anda mengkloning repositori repo, Anda dapat mengedit repo/.git/configdan menambahkan beberapa konfigurasi seperti di bawah ini:

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

Maka Anda tidak akan diminta untuk usernamedan passwordlagi.

Xiaorong Liao
sumber
Bekerja untuk saya dengan helper = manager(tapi saya diminta username + repo untuk push pertama).
Stéphane Laurent
dengan helper = manager Saya mendapatkan error credential-manager bukan perintah git
Kapil
Sayangnya git mengabaikan kata sandi dalam file konfigurasi. .git_credentials dengan credential.store adalah satu-satunya opsi.
Avamander
9

Saya tahu ini bukan solusi yang aman, tetapi kadang-kadang Anda hanya membutuhkan solusi sederhana - tanpa menginstal apa pun. Dan karena helper = store tidak bekerja untuk saya, saya membuat helper dummy:

Buat skrip dan letakkan di folder nampan pengguna Anda, di sini bernama credfake , skrip ini akan memberikan nama pengguna dan kata sandi Anda:

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

membuatnya dapat dieksekusi:

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

kemudian konfigurasikan di git:

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

(atau gunakan tanpa --global hanya untuk satu repo)

dan - voilá - git akan menggunakan kata sandi + pengguna ini.

bebbo
sumber
Saya setuju. Solusi sederhana (jika tidak aman) memang. +1, selama Anda tahu apa yang Anda lakukan.
VonC
7

Token otentikasi harus digunakan sebagai ganti kata sandi akun. Buka Pengaturan / aplikasi GitHub dan kemudian buat token akses pribadi. Token dapat digunakan dengan cara yang sama seperti kata sandi digunakan.

Token dimaksudkan untuk memungkinkan pengguna tidak menggunakan kata sandi akun untuk pekerjaan proyek. Hanya gunakan kata sandi saat melakukan pekerjaan administrasi, seperti membuat token baru atau mencabut token lama.


Alih-alih token atau kata sandi yang memberikan akses penuh kepada pengguna ke akun GitHub, kunci penerapan khusus proyek dapat digunakan untuk memberikan akses ke repositori proyek tunggal. Proyek Git dapat dikonfigurasi untuk menggunakan kunci yang berbeda ini dalam langkah-langkah berikut ketika Anda masih dapat mengakses akun atau proyek Git lainnya dengan kredensial normal Anda:

  1. Tulis file konfigurasi SSH yang berisi Host, IdentityFileuntuk kunci penggunaan, mungkin UserKnownHostsFile, dan mungkin User(meskipun saya pikir Anda tidak memerlukannya).
  2. Tulis skrip shell pembungkus SSH yang sebenarnya ssh -F /path/to/your/config $*
  3. Bertaruh GIT_SSH=/path/to/your/wrapperdi depan perintah Git normal Anda. Di sini git remote(asal) harus menggunakan [email protected]:user/project.gitformat.
Jinghua
sumber
7

Lebih baik menggunakan kredensial untuk keamanan, tetapi Anda dapat menyimpannya untuk beberapa saat menggunakan cache:

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

Kredensial Anda akan disimpan selama 3600 detik.

Sarvar Nishonboev
sumber
Artinya setelah 3600 detik, kita harus memasukkan kata sandi lagi ??? Bagaimana cara menyimpannya secara permanen?
HoangVu
$ git config credential.helper 'cache --timeout = 3600' error: tidak dapat mengunci file config .git / config: Tidak ada file atau direktori seperti itu
PlantationGator
Ini berhasil: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator
@Tama Saya tahu ini sudah tiga tahun, tetapi Anda bisa pergi begitu saja --timeoutdan kredensial akan disimpan selamanya.
Neil Chowdhury
Apakah ini akan berfungsi di dalam wadah Docker (berdasarkan windowsservercore)?
Peter Mortensen
5

Hal-hal sedikit berbeda jika Anda menggunakan otentikasi dua faktor seperti saya. Karena saya tidak menemukan jawaban yang baik di tempat lain, saya akan menempel di sini sehingga mungkin saya bisa menemukannya nanti.

Jika Anda menggunakan otentikasi dua faktor, maka menentukan nama pengguna / kata sandi bahkan tidak akan berfungsi - Anda mendapat akses ditolak. Tetapi Anda dapat menggunakan token akses aplikasi dan menggunakan pembantu kredensial Git untuk menyimpannya untuk Anda. Berikut tautan terkait:

Dan saya tidak ingat di mana saya melihat ini, tetapi ketika Anda diminta untuk nama pengguna Anda - di situlah Anda menempel token akses aplikasi. Kemudian biarkan kata sandi kosong. Ini bekerja di Mac saya.

JnBrymn
sumber
saat menggunakan otentikasi 2 arah, Anda menggunakan "token akses" sebagai kata sandi. nama pengguna tetap sama seperti biasa
Ben Yitzhaki
4

Ini berfungsi untuk saya, saya menggunakan Windows 10

git config --global credential.helper wincred
Mostafa Nawara
sumber
4

Biasanya Anda memiliki URL jarak jauh, 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 nama pengguna dan kata sandi saat menggunakan git push, coba ini:

 git remote set-url origin https://username:[email protected]/username/Repo.git

Saya baru saja menambahkan URL yang sama (dengan detail pengguna termasuk kata sandi) ke asal.

CATATAN: Tidak berfungsi jika nama pengguna adalah Id email.

git remote -v

origin    https://username:[email protected]/username/Repo.git (fetch)
origin    https://username:[email protected]/username/Repo.git (push)
Nayagam
sumber
3

Saya mendapat jawaban dari gitcredentials (7) Manual Page . Untuk kasus saya, saya tidak memiliki cache kredensial di instalasi Windows saya; Saya menggunakan toko kredensial.

Setelah saya menggunakan kredensial-toko, nama pengguna / kata sandi disimpan dalam file [folder pengguna] /. Git-kredensial. Untuk menghapus nama pengguna / kata sandi, cukup hapus konten file.

Mike Lin
sumber
2
Ketika Anda tidak memiliki cache kredensial di windows Anda, saya akan menyarankan untuk menggunakan git config --global credential.helper wincredkata sandi toko ini secara permanen.
Chetabahana
2

Dokumentasi komposer menyebutkan bahwa Anda dapat mencegahnya menggunakan API GitHub, sehingga berfungsi seperti git clone:

Jika Anda mengatur no-apikunci truepada repositori GitHub, itu akan mengkloning repositori seperti halnya dengan repositori Git lain alih-alih menggunakan API GitHub. Tetapi tidak seperti menggunakan gitdriver secara langsung, komposer masih akan mencoba menggunakan file zip GitHub.

Jadi bagian akan terlihat seperti ini:

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

Perlu diingat bahwa API ada karena suatu alasan. Jadi ini harus menjadi metode terakhir tentang peningkatan beban di github.com.

sebastianwagner
sumber
Tidak yakin apa hubungannya jawaban ini dengan pertanyaan awal.
Charles Oppermann
2

Anda juga mengedit bashrc file dan menambahkan skrip di dalamnya.

Ini akan meminta kata sandi Anda sekali ketika Anda memulai Git dan kemudian mengingatnya sampai Anda keluar.

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
ThePatelGuy
sumber
0

Jika Anda menggunakan osxkeychain dan memiliki token yang kedaluwarsa dan ingin memperbaruinya, ikuti langkah-langkah ini:

Jalankan di terminal, lalu tekan enter dua kali.

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

Sekarang Anda harus diminta nama pengguna / kata sandi. Namun kadang-kadang tampaknya ini tidak 'mengambil' dan Anda harus tetap masuk kembali.

Jika demikian, nyalakan kembali komputer Anda . Sekarang saat berikutnya Anda menjalankan perintah git dan memasukkan nama pengguna / kata sandi Anda, itu akan disimpan.

Andrew Schreiber
sumber