Saya kloning Git repositori dari akun GitHub untuk PC saya.
Saya ingin bekerja dengan baik di PC dan laptop, tapi dengan satu akun GitHub.
Ketika saya mencoba untuk mendorong atau menarik dari GitHub menggunakan PC saya, hal ini membutuhkan username dan password, tetapi tidak ketika menggunakan laptop!
Saya don't ingin mengetik username dan password saya setiap kali saya berinteraksi dengan asal. Apa yang saya hilang di sini?
Sebuah kesalahan umum adalah kloning menggunakan default (HTTPS) bukan SSH. Anda dapat memperbaiki hal ini dengan pergi ke repositori anda, klik "Clone atau men-download", kemudian klik "Menggunakan SSH" tombol di atas bidang URL dan memperbarui URL asal terpencil seperti ini:
git remote set-url origin [email protected]:username/repo.git
Hal ini didokumentasikan di GitHub: Switching remote Url HTTPS untuk SSH.
Jalankan perintah berikut untuk mengaktifkan credential caching:
$ git config credential.helper store
$ git push https://github.com/owner/repo.git
Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>
Anda juga harus menentukan caching berakhir,
git config --global credential.helper 'cache --timeout 7200'
Setelah mengaktifkan credential caching, itu akan di-cache untuk 7200 detik (2 jam).
Aku hanya datang di masalah yang sama, dan solusi yang paling sederhana yang saya temukan adalah untuk menggunakan SSH URL bukan HTTPS satu:
ssh://[email protected]/username/repo.git
Dan tidak ini:
https://github.com/username/repo.git
Sekarang anda dapat memvalidasi dengan just kunci SSH alih-alih username
dan password
.
Selain mengubah SSH anda juga bisa tetap menggunakan HTTPS, jika anda don't pikiran untuk membuat password anda dalam bentuk teks. Menempatkan ini dalam ~/.netrc
dan tidak't meminta username/password (setidaknya pada Linux dan Mac):
machine github.com
login <user>
password <password>
Tambahan (lihat VonC's kedua komentar): pada Windows dengan nama file %RUMAH%\_netrc
.
Baca juga VonC's komentar pertama dalam kasus anda ingin mengenkripsi.
Tambahan (lihat user137717's komentar) yang dapat anda gunakan jika anda memiliki Git 1.7.10 atau yang lebih baru.
Cache anda GitHub password di Git menggunakan credential penolong:
Jika anda're kloning repositori GitHub menggunakan HTTPS, anda dapat menggunakan credential penolong untuk memberitahu Git untuk mengingat username GitHub anda dan password setiap kali pembicaraan ke GitHub.
Ini juga bekerja pada Linux, Mac, dan Windows.
Bagi yang belum tahu yang bingung dengan jawaban sebelumnya, yang dapat anda lakukan:
git remote -v
Yang akan merespon dengan sesuatu seperti
origin https://[email protected]/yourname/yourrepo.git (fetch)
origin https://[email protected]/yourname/yourrepo.git (push)
Maka anda dapat menjalankan perintah banyak lainnya telah menyarankan, tapi sekarang anda tahu yourname dan yourrepo dari atas, sehingga anda hanya dapat memotong dan paste yourname/yourrepo.git
dari atas ke:
git remote set-url origin [email protected]:yourname/yourrepo.git
Jika anda're menggunakan SSH dan kunci pribadi anda dienkripsi dengan frasa sandi, kemudian anda'll masih akan diminta untuk memasukkan passphrase/password untuk private key ketika anda melakukan operasi jaringan dengan Git seperti push
, menarik
, dan ambil
.
Jika anda ingin menghindari harus memasukkan kata sandi anda setiap saat, anda dapat menggunakan ssh-agent
untuk menyimpan kunci pribadi anda kata sandi kredensial sekali per sesi terminal, seperti yang saya jelaskan di jawaban saya untuk tidak Bisa membuka koneksi ke otentikasi agen:
$ eval `ssh-agent -s`
$ ssh-add
Di Windows msysgit Bash, anda perlu mengevaluasi output dari ssh-agent`, tapi aku'm tidak yakin jika anda perlu untuk melakukan hal yang sama di lain pengembangan lingkungan dan sistem operasi.
ssh-add
mencari sebuah kunci pribadi di rumah anda .ssh
folder bernama id_rsa
, yang merupakan nama default, tapi anda bisa melewati filepath untuk sebuah key dengan nama yang berbeda.
Bila anda're selesai dengan sesi terminal, anda dapat shutdown ssh-agent
dengan membunuh bendera -k
:
$ ssh-agent -k
Seperti yang dijelaskan dalam ssh-agent
manual:
-k Membunuh saat ini agen (yang diberikan oleh SSH_AGENT_PID variabel lingkungan).
Juga, dapat mengambil optional parameter timeout seperti:
$ ssh-add -t <timeout>
di mana <timeout>
adalah format <n>jam
untuk <n> jam
, <n>m
untuk <n>
menit, dan sebagainya.
Menurut ssh-agent
manual:
-t hidup Mengatur nilai default untuk maksimal seumur hidup dari identitas ditambahkan ke agen. Seumur hidup dapat ditentukan dalam hitungan detik atau dalam format waktu yang ditentukan dalam sshd_config(5). Seumur hidup yang ditetapkan untuk identitas dengan ssh-add(1) menimpa nilai ini. Tanpa ini pilihan default maksimum seumur hidup selamanya.
Lihat halaman ini untuk lebih banyak waktu format.
Cygwin pengguna harus menyadari potensi risiko keamanan dengan menggunakan ssh-agent di Cygwin:
orang-orang harus menyadari potensi bahaya dari ssh-agent di bawah Cygwin 1, meskipun di bawah lokal netstat dan remote portscan ini tidak muncul port yang ditentukan di /tmp/ssh-foo diakses oleh siapa saja ...?
Dan di dikutip link:
namun, perhatikan bahwa Cygwin's Unix domain socket adalah FUNDAMENTALLY INSECURE dan jadi saya sangat DISCOURAGE penggunaan ssh-agent di bawah Cygwin.
ketika anda menjalankan ssh-agent di bawah Cygwin menciptakan AF_UNIX soket di
/tmp/ssh-$USERNAME/
direktori. Di bawah Cygwin AF_UNIX soket ditiru melalui AF_INET soket. Anda dapat dengan mudah melihat bahwa jika anda'll melihat ke/tmp/ssh-$USERNAME/agen-socket-*
file melalui Notepad. Anda'll melihat sesuatu seperti!
2080 kemudian jalankan
netstat -a
dan mengejutkan! Anda memiliki beberapa program mendengarkan port 2080. It's ssh-agent. Ketika ssh menerima RSA tantangan dari server, hal ini mengacu sesuai/tmp/ssh-$USERNAME/agen-socket-*
(di bawah Cygwin, dalam kasus kami, itu berarti'll membuka koneksi kelocalhost:2080
) dan meminta ssh-agent untuk proses RSA tantangan dengan kunci privat yang dimilikinya, dan kemudian itu hanya melewati respon yang diterima dari ssh-agent ke server.di Bawah Unix, skenario seperti bekerja tanpa masalah, karena kernel Unix cek izin saat program mencoba mengakses AF_UNIX socket. Untuk AF_INET soket, namun, koneksi anonim (baca "aman"). Bayangkan, bahwa anda memiliki Cygwin ssh-agent yang berjalan. Hacker mungkin portscan kotak anda, menemukan open port yang digunakan oleh ssh-agent, membuka koneksi ke server SSH anda, menerima RSA tantangan dari itu, kirimkan ke teman-ssh-agent melalui port yang terbuka dia/dia menemukan, menerima RSA respon, kirim ke SSH server dan voila, ia berhasil login ke server anda seperti anda.
Sumber: Set Up Git
Perintah berikut ini akan menyimpan password anda dalam memori untuk beberapa waktu (untuk Git 1.7.10 atau yang lebih baru).
$ git config --global credential.helper cache
# Set git to use the credential memory cache
$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after one hour (setting is in seconds)
Ketika anda menggunakan https untuk Git pull & mendorong, hanya mengkonfigurasi remote.asal.url
untuk proyek anda, untuk menghindari masukan username (atau/dan password) setiap kali anda menekan.
Cara mengkonfigurasi remote.asal.url`:
URL format: https://{username:password@}github.com/{pemilik}/{repo}Parameter di URL:
e.g git config remote.asal.url https://[email protected]/eric/myproject
ssh
Saya pikir menggunakan ssh
protokol adalah solusi yang lebih baik daripada https
, meskipun setup langkah ini sedikit lebih kompleks.
Kasar langkah-langkah:
ssh-keygen
di Linux, di windows msysgit
memberikan perintah yang sama.~/.ssh
. Dan menambahkannya ke ssh agent melalui ssh-add
perintah.remote.asal.url
dari repositori Git untuk ssh
gaya, misalnya, [email protected]:myaccount/myrepo.git
Tips:
https
dan ssh
protokol.Hanya dengan mengubah remote.asal.url
akan cukup, atau anda dapat edit repo_home/.git/config
langsung untuk mengubah nilai (e.g menggunakan vi
di Linux).
Biasanya saya menambahkan baris untuk masing-masing protokol, dan komentar salah satu dari mereka menggunakan #
.
E. g.
[remote "asal"] url = [email protected]:myaccount/myrepo.git # url = https://[email protected]/myaccount/myrepo.gitfetch = +refs/heads/*:refs/remotes/origin/*
Anda dapat cache GitHub password di Git:
Cukup ikuti petunjuk dari GitHub's dokumentasi resmi.
Setelah mengikuti petunjuk dari link di atas, anda harus mampu tekan/tarik ke/dari repositori anda tanpa mengetik username/password setiap kali.
Berikut ini's pilihan lain:
Alih-alih menulis
git push origin HEAD
Anda bisa menulis:
git push https://user:[email protected]/path HEAD
Jelas, dengan sebagian besar kerang ini akan menghasilkan password mendapatkan cache dalam sejarah, jadi ingatlah bahwa dalam pikiran.
Apa yang bekerja untuk saya adalah untuk mengedit .git/config
dan menggunakan
[remote "origin"]
url = https://<login>:<password>@gitlab.com(...).git
It goes tanpa mengatakan bahwa ini adalah sebuah cara yang tidak aman menyimpan password anda tetapi ada lingkungan/kasus-kasus di mana hal ini mungkin tidak menjadi masalah.
Anda pada dasarnya memiliki dua pilihan.
Jika anda menggunakan pengguna yang sama pada kedua mesin yang anda butuhkan untuk menyalin .pub kunci untuk PC anda, sehingga GitHub tahu bahwa anda adalah pengguna yang sama.
Jika anda telah membuat yang baru .pub file untuk PC anda dan ingin memperlakukan mesin-mesin sebagai pengguna yang berbeda, anda perlu mendaftar baru .pub file di GitHub website.
Jika masih tidak't bekerja itu mungkin karena ssh ini tidak dikonfigurasi dengan benar dan bahwa ssh gagal untuk menemukan lokasi anda kunci. Mencoba
ssh -vv [email protected]
Untuk mendapatkan informasi lebih lanjut mengapa SSH gagal.
Update untuk HTTPS:
GitHub telah meluncurkan program baru untuk Windows yang menyimpan kredensial anda ketika anda're menggunakan HTTPS:
Untuk menggunakan:
Men-Download program dari di sini
Setelah anda menjalankan program ini, maka akan mengedit .gitconfig file. Periksa kembali jika sudah diedit yang benar
.gitconfigdalam kasus anda memiliki beberapa dari mereka. Jika itu tidak't mengedit yang benar, tambahkan kode berikut untuk anda
.gitconfig`
[bukti] pembantu = !'C:\Path\To\Your\Downloaded\File\git-credential-winstore.exe'
PERHATIKAN garis putus setelah [bukti]
. Hal ini diperlukan.
git push origin master
sekali. Jika ia meminta anda untuk password, masukkan dan anda'kembali melalui. Password disimpan!Jika kunci SSH atau .netrc
file tidak bekerja untuk anda, maka yang lain sederhana, tapi kurang aman solusi, yang bisa bekerja untuk anda adalah git-kredensial-toko - Helper untuk toko kredensial pada disk:
git config --global credential.helper store
Secara default, mandat akan disimpan dalam file ~/.git-kredensial
. Itu akan dibuat dan ditulis.
Harap dicatat menggunakan helper ini akan menyimpan password terenkripsi pada disk, yang hanya dilindungi oleh filesystem izin. Jika hal ini tidak dapat diterima keamanan tradeoff.
Untuk Windows Git pengguna, setelah menjalankan git config --global credential.pembantu toko`, jika masih meminta password, anda'd lebih baik periksa di mana file konfigurasi ini ditulis untuk menggunakan perintah ini
git config --list --show-origin
Dalam kasus saya, setelah secara manual mengedit file konfigurasi 'C:\Program File\Git\mingw64\etc\gitconfig', dan menambahkan teks berikut, itu berhasil.
[credential]
helper = store
Saya memiliki masalah yang sama.
Jadi saya berubah .git/config
file dari proyek saya,
url = https://github.com/<your-user-here>/<your-repo-here>
untuk
url = [email protected]:<your-user-here>/<your-repo-here>
dan menambahkan SSH public key ke Git profil yang di setting.
Untuk SSH public key:
cat ~/.ssh/id_rsa.pub
Anda perlu melakukan dua langkah -
git remote menghapus asal
git remote add origin [email protected]:NuggetAI/nugget.git
Perhatikan Git URL SSH URL dan tidak HTTPS URL... Yang dapat anda pilih dari berikut ini:
Memperbarui Git file konfigurasi secara langsung (jika anda tidak ingin menghafal mewah perintah):
Buka .git/config
file dalam editor teks favorit anda. Itu akan berada di folder yang anda kloning atau dalam repositori yang anda dilakukan git init
di. Pergi ke repositori. .git
adalah folder tersembunyi, dan menekan Pilih + Jam harus menampilkan folder tersembunyi, (ls -a
di terminal).
Di bawah ini adalah contoh dari .git/config
file. Copy dan paste baris-baris ini dan pastikan untuk memperbarui baris tersebut dengan Git informasi.
[user]
name = Tux
email = [email protected]
username = happy_feet
[remote "origin"]
url = https://github.com/happy_feet/my_code.git
fetch = +refs/heads/*:refs/remotes/origin/*
Mengubah bagian URL dengan format berikut untuk SSH:
url = [email protected]:happy_feet/my_code.git
(Dalam format di atas tidak berubah dengan berbagai Git remote server seperti GitHub atau Bitbucket. It's yang sama jika anda menggunakan Git untuk version control):
Catatan: SSH cara menghubungkan ke remote repositori Git akan meminta anda untuk menambahkan kunci publik SSH untuk anda Git remote server (seperti GitHub atau Bitbucket. Pencarian halaman pengaturan untuk SSH keys).
Untuk mengetahui bagaimana untuk menghasilkan kunci SSH, lihat: Membuat SSH keys
Ini adalah apa yang bekerja untuk saya:
git remote set-url origin https://[email protected]/username/reponame.git
Contoh:
git remote set-url origin https://[email protected]/jsmith/master.git
Jika anda menggunakan Git (misalnya, Git Bash) di bawah Windows (dan jika anda don't ingin beralih dari HTTPS untuk SSH), anda juga bisa menggunakan Git Credential Manager untuk Windows
Aplikasi ini akan menyimpan username dan password untuk anda...