Git yêu cầu tên người dùng mỗi khi tôi đẩy


674

Bất cứ khi nào tôi cố gắng đẩy vào repo git của tôi yêu cầu cả hai username & password.

Tôi không gặp vấn đề gì khi nhập lại mật khẩu mỗi lần nhưng vấn đề là nhập tên người dùng. Tôi sử dụng httpsđể sao chép kho lưu trữ của tôi.

Vì vậy, làm thế nào tôi có thể cấu hình git để nó không yêu cầu usernametrên mỗi cái git push.

Tôi mới sử dụng linux nhưng IIRC trong windows git pushchỉ yêu cầu mật khẩu.



@Wug: Nhưng tôi không muốn lưu trữ mật khẩu. Tôi chỉ muốn lưu trữ tên người dùng.
RanRag

4
hãy thử làm theo những chỉ dẫn đó và bỏ qua dòng mật khẩu.
Wug


cũng có câu trả lời về superuser cho câu hỏi ban đầu của bạn - superuser.com/questions/847181/,
dk14

Câu trả lời:


974

Chỉnh sửa (bởi @ dk14 theo đề xuất của người kiểm duyệt và nhận xét)

CẢNH BÁO: Nếu bạn sử dụng credential.helper storetừ câu trả lời, mật khẩu của bạn sẽ được lưu trữ hoàn toàn không được mã hóa ("nguyên trạng") tại ~/.git-credentials. Vui lòng tham khảo phần bình luận bên dưới hoặc câu trả lời từ phần "Liên kết", đặc biệt nếu chủ lao động của bạn không khoan dung đối với các vấn đề bảo mật.

Mặc dù được chấp nhận, nó không trả lời câu hỏi thực tế của OP về việc chỉ bỏ qua tên người dùng (không phải mật khẩu). Đối với những độc giả có vấn đề chính xác đó, câu trả lời của @ grawity có thể có ích.


Câu trả lời gốc (bởi @Alexander Zhu):

Bạn có thể lưu trữ thông tin đăng nhập của mình bằng lệnh sau

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

Ngoài ra tôi đề nghị bạn đọc
$ git help credentials


160
Cảnh báo, không có bảo mật trong phương pháp này. Mật khẩu của bạn được lưu trữ dưới dạng văn bản gốc.
Đánh dấu Lakata

13
bạn có thể tìm thấy những cách tốt hơn để đạt được bảo mật tại đây - stackoverflow.com/a/28104587/1809978
dk14

4
@MarkLakata - Xin vui lòng cho tôi biết làm thế nào tôi có thể hoàn tác lệnh trong câu trả lời này? Sau khi tôi hoàn tác nó, tôi sẽ sử dụng một phương pháp bảo mật để lưu trữ thông tin đăng nhập.
MasterJoe2

25
@ thửjoe2 thửgit config --unset credential.helper
dk14

1
Đừng quên đặt thời gian chờ, mặc định là 15 phút - Đặt giá trị thành 30 triệu để có khoảng 1 năm. Tìm thấy ở đây: stackoverflow.com/a/35942890/1579667
Ngày

180

Bạn có thể thực hiện điều này trong .git/configtệp của kho lưu trữ cục bộ của bạn. Tệp này chứa một phần được gọi là 'từ xa' với mục nhập được gọi là 'url'. Mục nhập 'url' phải chứa liên kết https của kho lưu trữ mà bạn đang nói đến.

Khi bạn đặt tiền tố 'url' của máy chủ với tên người dùng của bạn, gitkhông nên hỏi tên người dùng của bạn nữa. Đây là một ví dụ:

url = https://username@repository-url.com

5
Nếu bạn sử dụng các ký tự đặc biệt trong tên người dùng hoặc pw thì bạn nên thoát chúng. Xem en.wikipedia.org/wiki/Percent-escape để biết các ký tự thoát đúng. ví dụ "! @ #" [không có trích dẫn] sẽ được thay thế bằng "% 21% 40% 23". Xem thêm câu trả lời "Daniel Lerch" bên dưới
nsof

1
Những người khác làm việc trên cùng một kho lưu trữ sẽ thấy tên người dùng của tôi?
CodyBugstein 18/03/2015

17
Đây phải là câu trả lời chính xác cho câu hỏi của OP, tức là "làm thế nào để duy trì tên người dùng, KHÔNG phải mật khẩu". Đây không chỉ là câu trả lời đúng cách để duy trì tên người dùng, mà còn tránh được rủi ro bảo mật có thể xảy ra git config credential.helper store.
RayLuo

Tôi rất cảm ơn vì câu trả lời này và đã thử theo cách này, nhưng nó vẫn hỏi tôi mỗi lần (v 2.1.4) - đã thử điều khiển từ xa với name@gitlab.com VÀ name%40mailaddress.com@gitlab.com - nó luôn yêu cầuusername for https://gitlab.com:
eli

1
Tôi đã thử cái này và nhận đượcunable to access 'https://<me>@bitbucket.org:<x>/<y>.git/': Illegal port number
Ian Grainger

118

Xác thực vĩnh viễn với kho Git

Chạy lệnh sau để kích hoạt bộ đệm ẩn thông tin xác thực:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://USERNAME@github.com': <PASSWORD>

Sử dụng cũng nên chỉ định bộ nhớ đệm hết hạn

git config --global credential.helper "cache --timeout 7200"

Sau khi kích hoạt bộ đệm thông tin xác thực, nó sẽ được lưu trong 7200 giây (2 giờ) .


Đọc thông tin đăng nhập Tài liệu

$ git help credentials

Tôi đặt thời gian chờ là 7200. Nhưng sau đó tôi nghĩ sẽ đặt nó thành 5 để thử nghiệm. Vì vậy, tôi đã đặt nó thành 5, nhưng sau đó khi tôi cố gắng đẩy lại sau 30 giây, nhưng tôi không được hỏi tên người dùng hoặc mật khẩu.
Butussy Butkus

Có thể là thông tin của bạn không lưu trữ trên toàn cầu.
Jay Patel

Về bảo mật, đáng để tham khảo các tài liệu: "Lệnh này lưu trữ thông tin đăng nhập trong bộ nhớ để sử dụng cho các chương trình Git trong tương lai. Thông tin lưu trữ không bao giờ chạm vào đĩa và bị quên sau khi hết thời gian cấu hình." git-scm.com/docs/git-credential-cache
mloskot

2
không phải git config credntial.helper storelà lệnh nguy hiểm, có thể đáp ứng để lưu trữ thông tin xác thực trong tệp ~ / .git-thông tin đăng nhập? Tôi nghĩ (và theo kinh nghiệm của tôi) lệnh ... cache ...- là đủ: git config --clogal credential.helper 'cache --timeout 7200'Nó tạo ra thư mục: ~/.git-credential-cachevới tệp bộ đệm trong đó Vì vậy, chỉ cần thực hiện lệnh này và KHÔNG phải là "... lưu trữ" -command
eli

Không làm việc cho tôi. Vẫn yêu cầu mật khẩu mỗi lần
Ian Grainger

75

Thêm khóa SSH mới như được mô tả trong bài viết này trên GitHub .

Nếu Git vẫn hỏi bạn tên người dùng và mật khẩu, hãy thử đổi https://github.com/thành git@github.com:URL từ xa:

$ git config remote.origin.url 
https://github.com/dir/repo.git

$ git config remote.origin.url "git@github.com:dir/repo.git"

19
Đây phải là câu trả lời đúng! Lưu thông tin xác thực của bạn là vô cùng không an toàn. Nếu tôi có khóa SSH, nó chỉ hỏi tôi thông tin xác thực vì tôi không có URL chính xác như được nêu ở đây.
Alexis Wilke

2
hoặc bạn có thể sử dụnggit config remote.origin.url "ssh://git@yourRepoHost/yourRepoName.git"
ndarkness

1
git config remote.origin.url git@gitlab.com: adammajewski / ray-backward-iteration.git
Adam

1
Cảm ơn, đây là câu trả lời tôi đang tìm kiếm.
Yupeng Tang

50

Cách dễ nhất tôi tìm thấy là với lệnh này:

git config --global credential.https://github.com.username <your_username>

Điều này hoạt động trên một trang web theo cơ sở trang web và sửa đổi cấu hình git toàn cầu của bạn.

Để xem các thay đổi, sử dụng:

git config --global --edit

1
Vì một số lý do, đây là phương pháp duy nhất hiệu quả với tôi. Cảm ơn!
mathetes

phương pháp này có an toàn không? mật khẩu github chỉ được lưu trữ trên máy tính cục bộ và không được đẩy lên github?
Akin Hwan

Tôi không biết tại sao đây không phải là câu trả lời được phê duyệt, lệnh hoạt động hoàn hảo và trả lời đầy đủ và chỉ cho câu hỏi: lưu trữ tên người dùng, không phải mật khẩu. Cảm ơn Ben!
AmaelH

Bạn cũng có thể chạy: [git config --global cert.rcper 'cache --timeout = 3600'] Vì vậy, mật khẩu của bạn sẽ được lưu trong một giờ mỗi lần
chương trình

31

Nếu bạn đang sử dụng https thay vì ssh, bạn có thể chỉnh sửa "url" theo .git/confignhư user701648 nói, nhưng nếu bạn muốn, bạn cũng có thể thêm mật khẩu:

url = https://username:password@repository-url.com

1
Điều gì nếu có @trong mật khẩu của tôi? url = https://username:abc@123@repository-url.comĐó là lỗi cho tôiCould not resolve host: @123@git.com
Rahul Mankar

Phần usernamedường như bị bỏ qua, khi máy chủ chuyển hướng (chẳng hạn như từ FOO đến FOO.git).
Mikhail T.

22

Bạn có thể đặt tên người dùng cho tất cả các kho lưu trữ tại một trang web nhất định bằng cách đặt một cái gì đó giống như sau vào tệp cấu hình Git của bạn. Bạn sẽ muốn thay đổi " https://example.com " và "tôi" thành URL thực tế và tên người dùng thực tế của bạn.

[credential "https://example.com"]
    username = me

(Đây là trực tiếp từ "thông tin trợ giúp git")


16

Thay đổi repo nhân bản hoạt động:

git remote set-url origin git@github.com:gitusername/projectname.git

Sử dụng thông tin đăng nhập được lưu trữ sẽ hoạt động và đặt thời gian chờ giúp mọi việc bớt khó chịu hơn. Nếu bạn sử dụng trình trợ giúp thông tin Windows, đó sẽ là phương pháp dễ nhất (đặc biệt là nếu SSH bị chặn).


Đây là một câu trả lời đúng cho GitHub (câu hỏi được đặt ra cụ thể ... (không chắc tại sao bạn lại bị từ chối).
Tim Groeneveld

12

Đảm bảo rằng bạn đang sử dụng SSH thay vì http. Kiểm tra câu trả lời SO này .


3
Nhưng tôi đã phải sử dụng httpvì trong trường đại học của tôi sshbị chặn bởi bộ phận quản trị hệ thống.
RanRag

Sau đó, có lẽ liên kết này sẽ giúp bạn.
gkris

Hiện tại đã có trang trợ giúp GitHub chính thức. Điều xảy ra với tôi là tôi đã nhân bản một trong những repos của riêng mình trước khi đăng nhập để nó không nhận ra tôi và được mặc định là HTTPS. help.github.com/articles/changing-a-remote-s-url
anon58192932


9

Ngoài câu trả lời của user701648, bạn có thể lưu thông tin đăng nhập vào thư mục nhà của bạn (toàn cầu cho tất cả các dự án), thay vì thư mục dự án bằng lệnh sau

$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

9

Khi tôi chỉ git pull , git pull origin xxx git yêu cầu cả tên người dùng và mật khẩu.

git config credential.helper store

nó hoạt động


9

Cách dễ nhất là tạo một ~/.netrctệp có nội dung sau:

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

(như được hiển thị ở đây: https://gist.github.com/ahoward/2885020 )

Bạn thậm chí có thể đóng các quyền trên tệp này để không ai có thể đọc mật khẩu của bạn bằng cách nhập:

chmod 600 ~/.netrc

6

Nếu bạn sử dụng SSH phiên bản, bạn sẽ không có bất kỳ vấn đề với passwords.Only một lần bạn tạo SSH chìa khóa, để nói git, mà này pc sẽ làm việc với này tài khoản github và không bao giờ hỏi tôi một lần nữa về bất kỳ truy cập (đối với máy tính này).

Cách tạo SSH cho Github


4

Để tránh nhập tên người dùng, nhưng vẫn được nhắc nhập mật khẩu, sau đó bạn có thể chỉ cần sao chép kho lưu trữ của mình bao gồm tên người dùng:

git clone user_name@example.gitrepo.com/my_repo.git

3
  1. $ git config cert.rcper store

  2. $ git đẩy / đẩy https://github.com/xxx.git

  3. Sau đó nhập tên người dùng và mật khẩu của bạn.

  4. Làm xong

Không phải git push/push https://github.com/xxx.gitvậy đâugit push https://github.com/xxx.git
Mohsin

3

ssh+ key authenticationlà cách đáng tin cậy hơn https+credential.helper

Bạn có thể định cấu hình để sử dụng SSH thay vì HTTPS cho tất cả các kho lưu trữ như sau:

git config --global url.ssh://git@github.com/.insteadOf https://github.com/

url.<base>.insteadOfđược ghi lại ở đây .


2

Phương pháp nhanh

nhận url của git của bạn khi bên trong thư mục làm việc:

git config remote.origin.url

sau đó :

git config credential.helper store

git push "url of your git"

sẽ hỏi tên người dùng và mật khẩu lần cuối

làm xong.


1

Bạn chỉ có thể chạy

git config --global credential.helper wincred

sau khi cài đặt và đăng nhập vào GIT cho các cửa sổ trong hệ thống của bạn.


Không thấy từ linux trong truy vấn. Xấu của tôi
cyperpunk

1

(Chỉ dành cho hệ điều hành Mac )

đối với WindowsLinux, vui lòng tham khảo liên kết tài liệu của Github được đề cập bên dưới.

Từ tài liệu Github: Liên kết tài liệu

Lưu mật khẩu GitHub của bạn trong Git

  • Bạn cần Git 1.7.10 hoặc mới hơn để sử dụng trình trợ giúp thông tin osxkeychain.

    để kiểm tra phiên bản Git của bạn: git --version

  • để tìm ra trình trợ giúp osxkeychain đã được cài đặt:

    git credential-osxkeychain

    nếu bạn nhận được phản hồi sau thì bạn đã cài đặt nó và sẵn sàng sử dụng trên máy mac của bạn:

    > Usage: git credential-osxkeychain <get|store|erase>

    nếu bạn không nhận được phản hồi như hình trên thì bạn có thể cài đặt nó bằng lệnh sau:

    git credential-osxkeychain

  • để bảo git sử dụng osxkeychain trên toàn cầu cho thông tin đăng nhập của git:

    git config --global credential.helper osxkeychain

    Nó sẽ nhắc một lần trước khi nó lưu thông tin đăng nhập vào móc khóa .

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.