Git liên tục nhắc tôi nhập mật khẩu


665

Tôi đã sử dụng Git được một thời gian rồi, nhưng những yêu cầu liên tục về mật khẩu đang bắt đầu đẩy tôi lên tường.

Tôi đang sử dụng Mac OS X và GitHub và tôi đã thiết lập các khóa Git và SSH của mình theo hướng dẫn của trang Set Up Git của GitHub .

Tôi cũng đã thêm khóa github SSH vào móc khóa Mac OS X của mình, như được đề cập trên trang mật khẩu khóa SSH của GitHub . Khóa công khai của tôi được đăng ký với Git.

Tuy nhiên, mỗi lần tôi cố gắng kéo Git, tôi phải nhập tên người dùng và mật khẩu của mình. Có cái gì khác ngoài khóa SSH mà tôi cần thiết lập cho cái này không?


1
Câu hỏi ngớ ngẩn, nhưng bạn đã xác minh rằng khóa SSH hoạt động khi chỉ cần sử dụng ssh cho máy bằng git?
Kurt Stutsman

4
Bạn có ý nghĩa gì đó như ssh -T git@github.com? Vâng, nó hoạt động tốt (nếu chậm một chút).
Catherine


Đối với url https, bạn có thể sử dụng (với git1.8.3 +) một trình trợ giúp thông tin git ' netrc'. Xem một ví dụ đầy đủ ở đây .
VonC

Tôi là người dùng Windows và tôi cũng gặp phải vấn đề yêu cầu mật khẩu ngay cả sau khi thêm khóa công khai vào tệp ủy quyền của máy chủ. Vấn đề thực sự là tôi đã không giữ các khóa công khai / riêng tư trong thư mục .ssh của thư mục c: \ chương trình \ git. Nếu bất cứ ai đang đối mặt với vấn đề như vậy, xin vui lòng sao chép các phím của bạn trong thư mục này và thử đẩy / kéo.
Raja Amer Khan

Câu trả lời:


797

Tôi nghĩ rằng bạn có thể có URL kho lưu trữ Git sai.

Mở .git/configvà tìm phần [nguồn gốc "từ xa]. Đảm bảo bạn đang sử dụng SSH:

ssh://git@github.com/username/repo.git

Bạn có thể thấy URL SSH trong trang chính của kho lưu trữ nếu bạn nhấp vào Sao chép hoặc tải xuống và chọn ssh .

Và KHÔNG phải httpshoặc gitmột:

https://github.com/username/repo.git
git://github.com/username/repo.git

Bây giờ bạn có thể xác thực chỉ bằng khóa SSH thay vì tên người dùng và mật khẩu.

Nếu Git phàn nàn rằng 'origin' has already been added, mở .configtập tin và chỉnh sửa các url = "..."phần sau [remote origin]nhưurl = ssh://github/username/repo.git


Các dịch vụ khác cũng vậy. Đảm bảo địa chỉ trông như sau:protocol://something@url

Ví dụ .git/configcho Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

4
Đây có thể là nó. Khi tôi gọi git từ xa -v tôi nhận được: origin github.com/Foo/Bar.git (fetch) origin github.com/Foo/Bar.git (đẩy) trong khi để làm việc với SSH, có vẻ như nó phải là: origin git @ github.com: Foo / Bar.git (fetch) origin git@github.com: Foo / Bar.git (đẩy) Điều này có thể là do ban đầu tôi đã kiểm tra dự án của mình bằng ứng dụng Mac của GitHub ( mac.github.com ). Bất cứ ý tưởng làm thế nào tôi có thể sửa chữa nó?
Catherine

8
Khắc phục url trong tệp .git / config, sử dụng git-remote để sửa lỗi hoặc xóa repo cục bộ của bạn và sao chép lại với URL chính xác.
static_rtti

91
Chỉ cần đánh vần cái này (như tôi cần): mở .git / config và trong [remote "origin"]phần được đặt url = ssh://git@github.com/username/Repo.git. Điều đó làm việc cho tôi.
Greg K

13
Kì lạ, giải pháp của @ GregK không hiệu quả với tôi, nhưng url = git@github.com:organization/Repo.gitđã làm việc. +1 để dẫn tôi xuống con đường đúng! Sự thành công!
jmort253

2
Tôi không thể nhấn mạnh đủ tầm quan trọng của việc sao chép bằng cách sử dụng ssh: // git @ github / [tên người dùng] / [reponame] .git là bạn muốn sử dụng một khóa để truy cập GIT không phải nhập tên người dùng và mật khẩu của bạn mỗi lần . Tôi tìm thấy cách duy nhất để khắc phục nó là xóa repo cục bộ và sao chép lại $ git clone ssh: // git @ github / [username] / [reponame] .git
Gene Myers

555

Cấu hình thông tin xác thực.

Trên OS X (nay là macOS), hãy chạy cái này trong Terminal :

git config --global credential.helper osxkeychain

Nó cho phép Git sử dụng tệp Keychain.app để lưu tên người dùng và mật khẩu và truy xuất cụm mật khẩu vào khóa SSH riêng tư của bạn từ khóa.

Đối với Windows sử dụng:

git config --global credential.helper wincred

Xử lý sự cố

Nếu trình trợ giúp thông tin Git được cấu hình chính xác, macOS sẽ lưu cụm mật khẩu trong móc khóa. Đôi khi, kết nối giữa SSH và cụm mật khẩu được lưu trong móc khóa có thể bị hỏng. Chạy ssh-add -Khoặc ssh-add ~/.ssh/id_rsađể thêm khóa vào móc khóa một lần nữa.

macOS v10.12 (Sierra) thay đổi thành ssh

Đối với macOS v10.12 (Sierra), ssh-add -Kcần được chạy sau mỗi lần khởi động lại. Để tránh điều này, hãy tạo ra ~/.ssh/configvới nội dung này.

Host *
   AddKeysToAgent yes
   UseKeychain yes
   IdentityFile ~/.ssh/id_rsa

Từ ssh_config mantrang ngày 10.12.2:

Sử dụng khóa

Trên macOS, chỉ định xem hệ thống có nên tìm kiếm cụm mật khẩu trong móc khóa của người dùng hay không khi cố gắng sử dụng một khóa cụ thể. Khi người dùng cung cấp cụm mật khẩu, tùy chọn này cũng chỉ định liệu cụm mật khẩu có được lưu vào móc khóa hay không khi nó được xác minh là chính xác. Đối số phải là 'có' hoặc 'không'. Mặc định là 'không'.

Apple đã thêm Technote 2449 giải thích những gì đã xảy ra.

Trước macOS Sierra, sshsẽ trình bày một hộp thoại yêu cầu cụm mật khẩu của bạn và sẽ cung cấp tùy chọn để lưu nó vào móc khóa. Giao diện người dùng này đã không còn được sử dụng một thời gian trước đây và đã bị xóa.


30
Đây là cách tốt nhất để làm điều này vì ứng dụng Github cho OSX (cũng có thể là Windows) sử dụng đường dẫn https cho git repos theo mặc định. Ngoài ra còn có một lý do chính đáng để sử dụng https thay vì ssh / git vì nhiều mạng công ty chỉ cho phép lưu lượng truy cập trên cổng 80443 vì lý do bảo mật.
codehugger

2
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 xác thực.
jbandi

3
+1 cho giải pháp key.app. Đây là điều TUYỆT VỜI đối với tôi vì máy chủ git của chủ nhân của tôi chỉ hỗ trợ http được cung cấp qua apache và họ không khuyến khích sử dụng .netrcphương thức tệp đặt mật khẩu của bạn vào văn bản gốc.
Josh

3
Lưu ý, tôi đã gặp lỗi 'credential-osxkeychain' is not a git command.vì tôi chưa cài đặt trình trợ giúp thông tin xác thực. Tôi đã làm theo các hướng dẫn ở đây để cài đặt nó: help.github.com/articles/set-up-git#password-caching
Hugh

2
Cảm ơn về bản cập nhật Sierra, tôi vừa cập nhật và không thể hiểu tại sao github cứ hỏi pw khi tôi thêm git config --global credential.helper osxkeychaintệp cấu hình trong .sshthư mục của tôi đã sửa chữa tôi.
pixel 67

139

Điều này xảy ra với tôi khi tôi nâng cấp lên macOS v10.12 (Sierra). Có vẻ như tác nhân SSH đã bị xóa khi nâng cấp.

$ ssh-add -L
The agent has no identities.

Đơn giản chỉ cần chạy định ssh-addvị hiện tại của tôi. Tôi đã nhập mật khẩu và tốt để đi lại.


9
+1 bị hỏng do nâng cấp Sierra. Lưu ý mật khẩu là mật khẩu cho khóa SSH của bạn chứ không phải mật khẩu người dùng Mac.
mbonness

1
Làm ssh-add không hoạt động nhưng dường như được đặt lại bằng cách đóng cửa sổ Terminal. Có lẽ đây là một "tính năng" mới.
joshd

Cảnh giác - điều này lại xảy ra với một bản cập nhật Sierra khác (10.12.2) nhưng áp dụng sửa chữa tương tự.
Brian

Có ai biết làm thế nào để cái này không được thiết lập lại sau khi Terminal bị đóng không?
nickjwallin

1
Tôi vừa cập nhật macbook pro của tôi lên 10.12.2 và nó đã phá vỡ git của tôi. Sử dụng ssh-add hoàn toàn làm việc cho tôi. Cảm ơn @amcc!
jimmyplaysdrums

68

Sử dụng cái này: Thay thế github.com bằng tên máy chủ phù hợp

git remote set-url origin git@github.com:user/repo.git

Tôi đã có bộ đó khi xem git remote -v. Tuy nhiên, tôi vẫn đang được nhắc nhập mật khẩu.
IgorGanapolsky

Tương tự, tôi đã đặt như những gì anh ấy đề xuất, nhưng tôi vẫn nhận được lời nhắc nhập mật khẩu, làm cách nào để ngăn chặn điều đó?
cyber8200

@IgorGanapolsky: Bạn đã bao giờ tìm thấy giải pháp cho mình chưa?
cyber8200

1
Điều này hoạt động đúng. Điều này thật kỳ lạ khi URL từ xa git@**không có thông tin xác thực và URL https@**không có :). Vì vậy, tôi tìm thấy tài liệu này .
Sujit Kumar Singh

54

Như những người khác đã nói, bạn có thể cài đặt một trình trợ giúp bộ đệm mật khẩu. Tôi hầu như chỉ muốn đăng liên kết cho các nền tảng khác chứ không chỉ Mac. Tôi đang chạy một máy chủ Linux và điều này rất hữu ích: Lưu mật khẩu GitHub của bạn trong Git

Đối với máy Mac:

git credential-osxkeychain

Các cửa sổ:

git config --global credential.helper wincred

Linux:

git config --global credential.helper cache
git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

5
Tôi đã phải cuộn xuống câu trả lời thứ ba để xem các hướng dẫn của Linux, đây phải là câu trả lời chính vì đây là vấn đề thường được tham khảo.
KoldBane

22

Cũng tìm kiếm những người đang yêu cầu bạn cho cụm mật khẩu. Là Git hoặc đại lý SSH của bạn?

Trong trường hợp của tôi, mỗi khi tôi làm git pullđiều đó là hỏi tôi:

Enter passphrase for key '/work/username/.ssh/id_rsa':

Vì vậy, tôi cho rằng đó là Git yêu cầu một cụm mật khẩu. Vì vậy, tôi tiếp tục săn lùng các giải pháp, chỉ sau đó nhận ra rằng tác nhân SSH của tôi đã ngừng hoạt động. Mà có thể được cố định bằng cách sử dụng eval $(ssh-agent)ssh-addnhư đã cho ở đây.

Ngoài ra, dán bên dưới một đoạn nhỏ bạn có thể thêm vào ~/.bashrc tệp (hoặc tương đương) để đảm bảo rằng tác nhân SSH của bạn được bắt đầu khi đăng nhập.

Trong mọi trường hợp, đây là một lỗi khá ngớ ngẩn mà tôi đã mắc phải, nhưng đăng nó ở đây, chỉ trong trường hợp nó giúp ai đó tiết kiệm thời gian khỏi sủa sai cây, như tôi đã làm.

# 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


Khá chắc chắn rằng bạn đang thiếu một dòng trong mã ở trên - theo stackoverflow.com/a/18915067/277023 bạn cần phải cóSSH_ENV="$HOME/.ssh/environment"
kellyfj

20
git config credential.helper store

Lưu ý: Mặc dù điều này thuận tiện, Git sẽ lưu trữ thông tin đăng nhập của bạn dưới dạng văn bản rõ ràng trong một tệp cục bộ (.git-thông tin đăng nhập) trong thư mục dự án của bạn (xem bên dưới để biết thư mục "nhà"). Nếu bạn không thích điều này, hãy xóa tệp này và chuyển sang sử dụng tùy chọn bộ đệm.

Nếu bạn muốn Git tiếp tục yêu cầu thông tin đăng nhập mỗi khi cần kết nối với kho lưu trữ từ xa, bạn có thể chạy lệnh này:

git config --unset credential.helper

Để lưu trữ mật khẩu trong thông tin .git trong thư mục% HOME% của bạn trái ngược với thư mục dự án: sử dụng cờ --global

git config --global credential.helper store

9

Hướng dẫn về Git trên Windows và GitHub bằng SSH để đẩy / kéo: Hướng dẫn minh họa về Git trên Windows

  1. Tải xuống và cài đặt PuTTY
  2. Đặt biến môi trường 'GIT_SSH' = 'path \ to \ plink.exe' (trong thư mục putty đã cài đặt) - rất quan trọng !!!
  3. Khởi động lại Windows Explorer để các biến môi trường có hiệu lực (không thể chỉ khởi động lại dấu nhắc lệnh)
  4. Chạy puttygen.exe để tạo khóa mới, sao chép công khai chìa khóa dẫn đến trang web GitHub
  5. Lưu khóa riêng mới này ở một nơi an toàn trên đĩa (tốt nhất không phải là Dropbox )
  6. Chạy putty.exe và kết nối SSH với github.co
  7. Nhanh chóng vào thư mục khởi động bằng cách chạy "shell: startup".
  8. Làm cho khóa riêng của bạn khởi động với Windows thông qua cuộc thi. Tạo một lối tắt trong thư mục Khởi động với cú pháp "path \ to \ pageant.exe" "path \ to \ privatekey"
  9. Chúng tôi không cần đặt cài đặt 'puttykeyfile' bên trong .git / config của kho lưu trữ của chúng tôi
  10. Điều rất quan trọng là "URL bản sao SSH" của GitHub được sử dụng chứ không phải HTTPS.

Không ai nên sử dụng putty nữa. Bạn có thể làm mọi thứ ngay bây giờ với các tiện ích tích hợp trong Windows 10. Hãy để putty, chỉ là putty.
Ian Smith

9

Trong Windows cho Git 1.7.9+, hãy chạy lệnh sau trên dấu nhắc lệnh để mở tệp cấu hình trong trình soạn thảo văn bản:

    git config --global --edit

Sau đó trong tệp, thêm khối sau nếu không có hoặc chỉnh sửa cho phù hợp:

    [credential "https://giturl.com"]
        username = <user id>
         helper = wincred

Lưu và đóng tập tin. Bạn sẽ cần cung cấp thông tin đăng nhập chỉ một lần sau khi thay đổi ở trên.


Điều này hoạt động hoàn hảo, bạn đã tiết kiệm hàng giờ của tôi, bây giờ tôi có thể tập trung vào công việc của mình, Cảm ơn rất nhiều Anh trai.
Mohammed Sufian

9

Sử dụng lệnh sau để tăng thời gian chờ để bạn có thể nhập lại mật khẩu trong một thời gian

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

Tôi đã sử dụng nó cho Bitbucket và GitHub nó hoạt động cho cả hai. Điều duy nhất bạn cần làm 3600là trong vài giây. Tăng nó đến bất cứ mức độ nào bạn muốn. Tôi đã thay đổi nó 259200là khoảng 30 ngày. Bằng cách này, tôi nhập lại mật khẩu của mình sau mỗi 30 ngày hoặc lâu hơn.


1
Ok, tôi đã thấy rằng điều này không tồn tại sau khi khởi động lại, vì vậy bạn vẫn cần nhập mật khẩu sau khi khởi động lại, bất kể thời gian chờ ...
Ben Winding

Đây là một cách hay để tạo bộ nhớ cache :) Ít nhất là tiết kiệm thời gian của tôi. Cảm ơn
ChikuMiku

@BenWinding vì nó lưu thông tin đăng nhập trong bộ nhớ.
z3dd

5

Tôi hình dung bạn đã khắc phục vấn đề của mình, nhưng tôi không thấy giải pháp ở đây đã giúp tôi, vì vậy đây là.

Nhập vào thiết bị đầu cuối:

echo "" > ~/.ssh/known_hosts

Điều đó sẽ làm trống known_hoststệp của bạn và bạn sẽ phải thêm mọi máy chủ bạn đã sử dụng và đã kết nối, nhưng nó đã giải quyết được vấn đề.


1
cat /dev/null > ~/.ssh/known_hostssẽ làm như vậy
Tin Man

5
> ~/.ssh/known_hoststhậm chí còn ngắn hơn :)
Collin Allen

rm ~ / .ssh / know_hosts cũng nên thực hiện công việc. Tôi sẽ khuyên chống lại điều này mặc dù.
orkoden

3
Nếu bạn cần xóa một máy chủ khỏi ~ / .ssh / know_hosts, có một cách ít tác động hơn là xóa sạch tệp. ~ / .ssh / unknown_hosts chỉ là một tệp văn bản và nếu bạn có thể tìm thấy các máy chủ vi phạm trong tệp, bạn có thể xóa các dòng của chúng. Bạn có thể muốn sao lưu tập tin trước khi chỉnh sửa nó. Nếu bạn chỉ có một vài mục trong tệp, thì việc xóa sạch nó có thể không phải là ý tưởng tồi. Tôi làm việc trên nhiều máy chủ vì vậy ~ / .ssh / know_hosts của tôi có hàng trăm mục trong đó và tôi chưa sẵn sàng để xóa tất cả chúng để xóa một vài mục.
Tim Stewart

3
@papan Điều này không ngăn git hỏi tôi mật khẩu của tôi!
IgorGanapolsky

5

Tôi cảm thấy như câu trả lời được cung cấp bởi static_rtti theo một nghĩa nào đó. Tôi không biết nếu điều này đã có sẵn trước đó, nhưng các công cụ Git hiện cung cấp lưu trữ thông tin xác thực.

Chế độ bộ nhớ cache

$ git config --global credential.helper cache

Sử dụng chế độ Bộ nhớ cache trong chế độ bộ nhớ cache để giữ thông tin đăng nhập trong bộ nhớ trong một khoảng thời gian nhất định. Không có mật khẩu nào được lưu trữ trên đĩa và chúng sẽ bị xóa khỏi bộ đệm sau 15 phút.

Chế độ lưu trữ

$ git config --global credential.helper 'store --file ~/.my-credentials'

Sử dụng chế độ lưu trữ trên mạng của Cv để lưu thông tin đăng nhập vào tệp văn bản thuần trên đĩa và chúng không bao giờ hết hạn.

Cá nhân tôi đã sử dụng chế độ cửa hàng . Tôi đã xóa kho lưu trữ của mình, nhân bản nó và sau đó phải nhập thông tin đăng nhập của tôi một lần.

Tham khảo: 7.14 Công cụ Git - Lưu trữ thông tin xác thực


Đối với Windows credential.helper cacheKHÔNG hoạt động. Nó phải git config --global credential.helper wincred.
Paulo Merson

Lưu trữ nó hoạt động và bây giờ nó cho phép tôi thực hiện các thay đổi của mình mà không cần nhắc mật khẩu mọi lúc, bạn là một cứu cánh!
g4ost

Trong Linux, điều này đã làm công việc cho tôi git config --local credential.helper store. Trong trường hợp của tôi, tôi vượt qua HTTPS, theo cách này tôi chỉ nhập tên người dùng / mật khẩu một lần và sau đó, thông tin đăng nhập của tôi được sử dụng lại từ ~ / .git-thông tin đăng nhập
CCarlos

3

Câu trả lời của orkoden về việc sử dụng móc khóa với Git trong thiết bị đầu cuối của bạn không đầy đủ và gây ra lỗi. Đây là những gì bạn phải làm để lưu tên người dùng và mật khẩu bạn nhập vào thiết bị đầu cuối trong móc khóa của bạn:

curl http://github-media-downloads.s3.amazonaws.com/osx/git-credential-osxkeychain -o git-credential-osxkeychain
sudo mv git-credential-osxkeychain /usr/local/bin
sudo chmod u+x /usr/local/bin/git-credential-osxkeychain

Sau đó nhập

git config --global credential.helper osxkeychain

Nếu bạn đã thực hiện một phần với cấu hình Git trước công cụ curl, thì không vấn đề gì; nó sẽ làm việc


1
Điều gì xảy ra nếu tôi trên linux.
IgorGanapolsky

3

Như static_rtti đã nói ở trên, thay đổi

https://github.com/username/repo.git
git://github.com/username/repo.git

đến

ssh://git@github.com/username/repo.git

Bản thân tôi đã thay đổi httpstệp .git / config thành ssh, nhưng nó vẫn không hoạt động. Sau đó, tôi thấy rằng bạn phải thay đổi github.comđể git@github.com. Một cách tốt để có được URL chính xác thực tế là đi đến trang dự án của bạn và nhấp vào đây:

Thay đổi HTTPS thành SSH để lấy đúng URL

Sau đó thêm URL này vào tập tin cấu hình.


Tôi đã có trong tập tin cấu hình cấu hình của mình rồi, tôi nên kiểm tra cái gì nữa?
cyber8200

Bạn có thay đổi nó trên github.com không?
CheesusCrust 18/03/2017

3

Trên Hệ thống con Windows cho Linux (WSL), đây là giải pháp duy nhất mà tôi thấy hoạt động:

eval `ssh-agent` ; ssh-add ~/.ssh/id_rsa

Đó là một vấn đề với ssh-agent không được đăng ký đúng cách trong WSL.


Đã là một whlie, nhưng đây là những gì đã khắc phục vấn đề của tôi.
Nam Kim

3

Nếu bạn muốn ngăn Git luôn yêu cầu bạn cung cấp thông tin đăng nhập của kho lưu trữ GitHub, điều này có thể dễ dàng thực hiện.

Sử dụng SSH thay vì HTTPS

Bạn có thể cập nhật từ xa nguồn gốc bằng SSH thay vì HTTPS "

git remote set-url origin git@github.com:username/your-repo.git

Định cấu hình Git để lưu trữ mật khẩu và tên người dùng của bạn

Đây là cách bạn có thể khiến Git lưu tên người dùng và mật khẩu:

git config --global credential.helper store

Tiếp theo, lưu tên người dùng và mật khẩu cho một phiên:

git config --global credential.helper cache

2

Tôi đồng ý với "codehugger" và sử dụng hướng dẫn của "orkoden", nó hoạt động với tôi - trên NetBeans 7.3 - khi bạn nhấp chuột phải vào tệp và chọn menu ngữ cảnh - đẩy - một cửa sổ 'đẩy đến từ xa' - có hai tùy chọn ở đây:

  1. origin:https://github.com/myaccount/myproject.git/

  2. https://github.com/myaccount/myproject.git/

Như bạn có thể thấy, sự khác biệt là tham số gốc trong URL - bạn không muốn chọn tùy chọn này (1) bạn muốn kiểm tra tùy chọn (2) và điều đó chỉ hoạt động tốt với tôi.


2

Bước 1: kiểm tra cấu hình hiện tại của bạn

cat .git/config

Bạn sẽ nhận được:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
    precomposeunicode = true
[remote "origin"]
    url = https://github.com/path_to_your_git.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[user]
    name = your_username
    email = your_email
[branch "master-staging"]
    remote = origin
    merge = refs/heads/master-staging

Bước 2: xóa nguồn gốc từ xa của bạn

git remote rm origin

Bước 3: thêm nguồn gốc từ xa trở lại với tên người dùng và mật khẩu của bạn

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Sau khi bạn đã thêm nguồn gốc từ xa một lần nữa, bạn cũng cần căn chỉnh các chi nhánh của mình từ xa và cục bộ - đại loại như thế này: git branch --set-upstream master origin/master
Richard Bown

2

Nếu Git nhắc bạn tên người dùng và mật khẩu mỗi khi bạn cố gắng tương tác với GitHub, thì có lẽ bạn đang sử dụng URL bản sao HTTPS cho kho lưu trữ của mình.

Sử dụng URL từ xa HTTPS có một số lợi thế: dễ cài đặt hơn SSH và thường hoạt động thông qua tường lửa và proxy nghiêm ngặt. Tuy nhiên, nó cũng nhắc bạn nhập thông tin đăng nhập GitHub của bạn mỗi khi bạn kéo hoặc đẩy kho lưu trữ.

Bạn có thể cấu hình Git để lưu trữ mật khẩu cho bạn. Đối với Windows :

git config --global credential.helper wincred

2

Chạy macOS Cataline 10.15, phương pháp lưu trữ khóa móc khóa không hoạt động đối với tôi. Và tôi muốn sử dụng https://khôngssh

Đây là những gì làm việc cho tôi:

git remote rm origin

git remote add origin https://your_git_username:your_git_password@github.com/path_to_your_git.git

Điều này cũng hoạt động trên GitLab

Đảm bảo nếu tên người dùng chứa địa chỉ email, để xóa @emailphần đó hoặc bạn sẽ gặp lỗi URL using bad/illegal format or missing URL.

Hi vọng điêu nay co ich!


Đây là giải pháp DUY NHẤT làm việc cho tôi. your_git_username rất quan trọng. Nó thực sự không cần thiết phải đặt: your_git_password. Tại thời điểm này, mặc dù nó vẫn yêu cầu "cụm mật khẩu", giờ đây nó sẽ chấp nhận mật khẩu tài khoản.
kbulgrien

1

Có nhiều loại xác thực khác nhau tùy thuộc vào cấu hình của bạn. Ở đây có một ít:

  1. git credential-osxkeychain.

    Nếu thông tin của bạn không hợp lệ, hãy xóa nó bằng cách:

      git credential-osxkeychain erase
    

    hoặc là:

      printf "protocol=https\nhost=github.com\n" | git credential-osxkeychain erase
    

    Vì vậy, Git sẽ không yêu cầu bạn cho phép móc khóa một lần nữa. Sau đó cấu hình lại.

    Xem: Cập nhật thông tin đăng nhập từ OS X Keychain tại GitHub

  2. Khóa SSH RSA của bạn.

    Đối với điều này, bạn cần so sánh khóa SSH của mình với những gì bạn đã thêm, kiểm tra bằng ssh-add -L/ ssh-add -lnếu bạn đang sử dụng đúng danh tính.

  3. Xác thực HTTPS của bạn (nếu bạn đang sử dụng httpsthay vì sshgiao thức).

    Sử dụng ~/.netrc( %HOME%/_netrctrên Windows), để cung cấp thông tin đăng nhập của bạn, vd

      machine stash1.mycompany.com
      login myusername
      password mypassword
    

Tìm hiểu thêm: Đồng bộ hóa với GitHub tại Stack Overflow.





0

Giải pháp Microsoft Stack (Windows và Azure DevOps)

Đầu tiên mở .git/configtệp để đảm bảo địa chỉ trông như sau:

protocol://something@url

Ví dụ: .git / config cho Azure DevOps:

[remote "origin"]
    url = https://mystore@dev.azure.com/mystore/myproject/
    fetch = +refs/heads/*:refs/remotes/origin/*

Nếu sự cố vẫn còn, hãy mở Trình quản lý thông tin Windows , nhấp vào safebox có tên Windows Credentials và xóa tất cả các thông tin liên quan đến git.

Bây giờ lần sau khi bạn đăng nhập vào git, nó sẽ không biến mất nữa.


0

Nếu bạn đã thiết lập tác nhân SSH, bạn cũng có thể thêm phần này vào ~/.gitconfigđể buộc git sử dụng SSH cho tất cả các repos GitHub thay vì HTTPS:

[url "ssh://git@github.com/"]
    insteadOf = git://github.com/
    insteadOf = https://github.com/

(Nếu bạn chủ yếu làm việc với repos công khai, bạn cũng có thể sử dụng pushInsteadOfchứ không phải insteadOf, vì việc đọc từ repo công khai có thể được thực hiện mà không cần xác thực).

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.