Làm thế nào để thiết lập tên người dùng và mật khẩu cho các repos git khác nhau?


17
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = xxxx@xxxx.xxx
[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

Bây giờ tôi muốn đặt thông tin git của mình cho github, gitlab và gitorious để mỗi lần tôi không phải tìm kiếm thông tin đăng nhập trên trình duyệt. Làm thế nào điều này có thể được thực hiện để nó tự động?

Tôi đang chạy zsh

Câu trả lời:


19

Sử dụng SSH

Cách tiếp cận phổ biến để xử lý xác thực git là ủy quyền cho SSH. Thông thường, bạn đặt khóa công khai SSH trong kho lưu trữ từ xa ( ví dụ: trên GitHub ), sau đó bạn sử dụng khóa đó bất cứ khi nào bạn cần xác thực. Tất nhiên, bạn có thể sử dụng một tác nhân chính, được xử lý bởi môi trường máy tính để bàn của bạn hoặc bằng tay với ssh-agentssh-add.

Để tránh phải chỉ định tên người dùng, bạn cũng có thể định cấu hình tên đó trong SSH ~/.ssh/config; ví dụ tôi có

Host git.opendaylight.org
  User skitt

và sau đó tôi có thể nhân bản bằng cách sử dụng

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

(lưu ý sự vắng mặt của một tên người dùng ở đó).

Sử dụng gitcredentials

Nếu phương pháp SSH không áp dụng ( ví dụ: bạn đang sử dụng kho lưu trữ được truy cập qua HTTPS), git sẽ có cách xử lý thông tin đăng nhập riêng, sử dụng gitcredentials(và thông thường git-credential-store). Bạn chỉ định tên người dùng của mình bằng

git config credential.${remote}.username yourusername

và người trợ giúp thông tin sử dụng

git config credential.helper store

(chỉ định --globalnếu bạn muốn sử dụng thiết lập này ở mọi nơi).

Sau đó, lần đầu tiên bạn truy cập vào kho lưu trữ, git sẽ hỏi mật khẩu của bạn và nó sẽ được lưu trữ (theo mặc định ~/.git-credentials). Các lần truy cập tiếp theo vào kho lưu trữ sẽ sử dụng mật khẩu được lưu trữ thay vì hỏi bạn.


1
bạn có thể giải thích một chút về credential.${remote}credential.helper. Có một số tài liệu bạn có thể chỉ ra vì đây là lần đầu tiên tôi đọc về nó.
shirish

Tôi đã liên kết với các trang trong câu trả lời của tôi, đó là tài liệu. ${remote}là giao thức và tên máy chủ của URI mà bạn muốn sao chép, helpertrỏ đến chương trình trợ giúp.
Stephen Kitt

1
Ngoài ra còn có một chương của Pro Git về chủ đề này.
Stephen Kitt

6

Đối với những người tìm thấy điều này sau này - tôi đã gặp khó khăn với điều này và cuối cùng đã làm cho nó hoạt động

https / thông tin đăng nhập. Ubuntu / Ubuntu

  1. Bỏ đặt toàn cầu:
    git config --global --unset credentials.helper
  2. Bỏ đặt cục bộ: (Trong mỗi repo) git config --unset credential.helper
  3. Tạo tập tin xác thực cho mỗi repo: (bên trong mỗi repo)

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

Không nói đó là cách tốt nhất hay cách duy nhất - nhưng nó hiệu quả với tôi sau vài giờ bực bội.


dường như tương tự như những gì stephen kitt đã chia sẻ ở trên.
shirish

2
@shirish không thực sự, điểm thứ ba là tùy chọn tôi cần - tùy chọn để xác định vị trí của các tệp.
Mārtiņš Briedis

@shirish; Ngoài ra, hướng dẫn Kitts không chỉ định hủy cài đặt thông tin đăng nhập, đây là thành phần quan trọng đối với tôi vì tôi đã đặt chúng trên toàn cầu.
SteveJ

Tôi cũng gặp khó khăn với điều này vì nó không phải là tất cả các repos git. bạn sẽ nhận được từ cùng một nguồn / cửa hàng. Thứ hai là tốt hơn nhưng thất vọng hơn nhiều để làm việc trong thực tế. Vẫn cảm ơn bạn đã chia sẻ. @SteveJ
shirish
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.