cara mengatur nama pengguna dan kata sandi untuk repositori git yang berbeda?

17
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = [email protected]
[core]
    editor = leafpad
    excludesfiles = /home/shirish/.gitignore
    gitproxy = \"ssh\" for gitorious.org
[merge]
    tool = meld
[push]
    default = simple
[color]
    ui = true
    status = auto
    branch = auto

Sekarang saya ingin meletakkan kredensial git saya untuk github, gitlab dan gitorious sehingga setiap kali saya tidak harus mencari kredensial di browser. Bagaimana ini bisa dilakukan sehingga otomatis?

Saya menjalankan zsh

shirish
sumber

Jawaban:

19

Menggunakan SSH

Pendekatan umum untuk menangani otentikasi git adalah mendelegasikannya ke SSH. Biasanya Anda menetapkan kunci publik SSH di repositori jarak jauh ( mis. Pada GitHub ), dan kemudian Anda menggunakannya kapan pun Anda perlu mengotentikasi. Anda dapat menggunakan agen kunci tentu saja, baik ditangani oleh lingkungan desktop Anda atau secara manual dengan ssh-agentdan ssh-add.

Untuk menghindari keharusan menentukan nama pengguna, Anda dapat mengonfigurasinya di SSH juga, di ~/.ssh/config; misalnya saya punya

Host git.opendaylight.org
  User skitt

dan kemudian saya bisa mengkloning menggunakan

git clone ssh://git.opendaylight.org:29418/aaa

(perhatikan tidak adanya nama pengguna di sana).

Menggunakan gitcredentials

Jika pendekatan SSH tidak berlaku ( misalnya Anda menggunakan repositori yang diakses melalui HTTPS), git memang memiliki caranya sendiri dalam menangani kredensial, menggunakan gitcredentials(dan biasanya git-credential-store). Anda menentukan nama pengguna Anda menggunakan

git config credential.${remote}.username yourusername

dan bantuan kredensial yang digunakan

git config credential.helper store

(tentukan --globaljika Anda ingin menggunakan pengaturan ini di mana-mana).

Kemudian saat pertama kali Anda mengakses repositori, git akan meminta kata sandi Anda, dan itu akan disimpan (secara default di ~/.git-credentials). Akses selanjutnya ke repositori akan menggunakan kata sandi yang disimpan alih-alih meminta Anda.

Stephen Kitt
sumber
1
dapat Anda jelaskan sedikit tentang credential.${remote} dan credential.helper. Apakah ada beberapa dokumentasi yang bisa Anda tunjukkan karena ini adalah pertama kalinya saya membacanya.
shirish
Saya ditautkan ke halaman manual dalam jawaban saya, itulah dokumentasinya. ${remote}adalah protokol dan nama host bagian dari URI yang ingin Anda tiru, helperarahkan ke program pembantu.
Stephen Kitt
1
Ada juga bab Pro Git tentang topik ini.
Stephen Kitt
6

Bagi mereka yang menemukan ini nanti - saya mengalami kesulitan dengan ini dan akhirnya membuatnya bekerja

https / credentials.helper / Ubuntu

  1. Batalkan global:
    git config --global --unset credentials.helper
  2. Tidak disetel secara lokal: (Di setiap repo) git config --unset credential.helper
  3. Buat file kredensial untuk setiap repo: (di dalam setiap repo)

    git config credential.helper 'store --file ~/.git_reponame_credentials'
    

Bukan mengatakan itu adalah cara terbaik atau satu-satunya cara - tetapi itu berhasil bagi saya setelah beberapa jam yang membuat frustrasi.

SteveJ
sumber
tampaknya mirip dengan apa yang steph kitt bagikan di atas.
shirish
2
@ Shirish tidak benar-benar, titik ketiga adalah yang saya butuhkan - opsi untuk menentukan di mana file berada.
Mārtiņš Briedis
@ Shirish; Juga, instruksi Kitts tidak menentukan un menetapkan kredensial, yang merupakan komponen penting bagi saya karena saya sudah menetapkannya secara global.
SteveJ
Saya juga mengalami kesulitan dengan ini karena tidak seolah-olah semua repositori git. Anda akan dapatkan dari sumber / toko yang sama. Yang kedua lebih baik tetapi jauh lebih menyebalkan untuk bekerja dalam kenyataan. Masih terima kasih sudah berbagi. @SteveJ
shirish