Tên người dùng và mật khẩu trong lệnh cho git push


107

Có thể sao chép kho lưu trữ git, chỉ định tên người dùng và mật khẩu trong lệnh. Thí dụ:

git clone https://username:password@myrepository.biz/file.git

Có thể chỉ định tên người dùng và mật khẩu khi đẩy không? Vì vậy, ví dụ, chạy git push origin --allsau đó sẽ xuất ra yêu cầu mật khẩu. Tôi muốn điều này trong một lệnh.

(Tôi biết về khả năng thiết lập khóa và các giải pháp khác, nhưng tôi muốn biết liệu có cách nào để tiếp tục sử dụng tên người dùng và mật khẩu bằng một lệnh hay không.) Tôi đang chạy Git Bash trên Windows 8.1.


Bạn có tìm thấy giải pháp cho git commit?
Nam Vu

Câu trả lời:


157

Có, bạn có thể làm

git push https://username:password@myrepository.biz/file.git --all

trong trường hợp này https://username:password@myrepository.biz/file.gitthay thế origintronggit push origin --all

Để xem thêm các tùy chọn git push, hãy thửgit help push


13
Lưu ý rằng điều này sẽ lưu trữ tên người dùng và mật khẩu ở dạng văn bản rõ trong cấu hình git.
poke

4
thay vì mật khẩu đơn giản bạn có thể sử dụng mật khẩu băm
Vasiliy Vanchuk

1
@VasiliyVanchuk Bạn sử dụng loại băm nào? Điều này có hiệu quả với Github không?
Raphi

14
điều gì xảy ra nếu mật khẩu chứa @?
Rahul Sharma

1
Đề xuất bao gồm đường dẫn hoàn chỉnh ' ', ví dụ:git push 'https://username:password@myrepository.biz/file.git'
AlikElzin-kilaka,

27

Tôi đã sử dụng định dạng dưới đây

git push https://username:password@myrepository.biz/file.git --all

và nếu mật khẩu hoặc tên người dùng của bạn chứa @, hãy thay thế nó bằng% 40


Bạn thậm chí có thể sử dụng WebUtility.UrlEncode (mật khẩu) để nhận được rằng% 40
iPradeep

đối với người dùng php sử dụng điều urlencode($password)này sẽ mã hóa tất cả các ký tự đặc biệt không chỉ @.
shyammakwana.me

3

Theo tài liệu Git , đối số cuối cùng của git pushlệnh có thể là kho lưu trữ mà bạn muốn đẩy đến:

    git push [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
             [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
             [<repository> [<refspec>…]]

repositorytham số có thể là một URL hoặc một tên từ xa.

Vì vậy, bạn có thể chỉ định tên người dùng và mật khẩu giống như cách bạn làm trong ví dụ về clonelệnh của mình .


2
Điều đó có vẻ phù hợp, nhưng khi tôi thêm git repo với tên người dùng và mật khẩu làm đối số, làm ví dụ, nó vẫn nhắc nhập mật khẩu.
Jake

3

Git sẽ không lưu trữ mật khẩu khi bạn sử dụng các URL như vậy. Thay vào đó, nó sẽ chỉ lưu trữ tên người dùng, vì vậy nó chỉ cần nhắc bạn nhập mật khẩu vào lần sau. Như đã giải thích trong sách hướng dẫn , để lưu trữ mật khẩu, bạn nên sử dụng trình trợ giúp thông tin xác thực bên ngoài . Đối với Windows, bạn có thể sử dụng Windows Credential Store cho Git . Trình trợ giúp này cũng được bao gồm theo mặc định trong GitHub dành cho Windows .

Khi sử dụng, mật khẩu của bạn sẽ tự động được ghi nhớ, vì vậy bạn chỉ cần nhập một lần. Vì vậy, khi bạn sao chép, bạn sẽ được yêu cầu nhập mật khẩu và sau đó mọi giao tiếp tiếp theo với điều khiển từ xa sẽ không nhắc bạn nhập lại mật khẩu của mình. Thay vào đó, trình trợ giúp thông tin xác thực sẽ cung cấp cho Git xác thực.

Tất nhiên, điều này chỉ hoạt động để xác thực qua https; để truy cập ssh ( git@host.com/repository.git), bạn sử dụng các khóa SSH và những khóa bạn có thể nhớ bằng cách sử dụng ssh-agent(hoặc cuộc thi của PuTTY nếu bạn đang sử dụng liên kết).


4
"Tôi biết về khả năng thiết lập khóa và các giải pháp khác, nhưng tôi muốn biết liệu có cách nào để chỉ sử dụng tên người dùng và mật khẩu bằng một lệnh hay không."
Marvin

@Marvin Tôi biết nhận xét đó, tuy nhiên tôi không chỉ muốn gửi một câu trả lời có hai câu, vì vậy tôi đã bao gồm thông tin cho những người dùng khác có thể không chỉ quan tâm đến việc kết nối qua HTTPS.
poke

4
Tuy nhiên, nó vẫn không trả lời câu hỏi của anh ta.
Marvin

3

Có thể xảy ra nhưng, trước git 2.9.3 (tháng 8 năm 2016), a git pushsẽ in url đầy đủ được sử dụng khi đẩy trở lại repo nhân bản.
Điều đó sẽ bao gồm tên người dùng và mật khẩu của bạn!

Nhưng không còn nữa: Xem cam kết 68f3c07 (20 tháng 7 năm 2016) và cam kết 882d49c (14 tháng 7 năm 2016) bởi Jeff King ( peff) .
(Hợp nhất bởi Junio ​​C Hamano - gitster- trong cam kết 71076e1 , ngày 08 tháng 8 năm 2016)

push: ẩn danh URL trong đầu ra trạng thái

Cam kết 47abd85 (tìm nạp: Tách tên người dùng khỏi url trước khi lưu trữ, 2009-04-17, Git 1.6.4) dạy tìm nạp để ẩn danh URL.
Mục đích chính là để tránh dính mật khẩu trong các thông báo hợp nhất-cam kết, nhưng do một tác dụng phụ, chúng tôi cũng tránh in chúng ra stderr.

Bên đẩy không có vấn đề hợp nhất-cam kết, nhưng có lẽ nên tránh in chúng ra stderr . Chúng ta có thể sử dụng lại cùng một chức năng ẩn danh.

Lưu ý rằng đối với điều này, thông tin xác thực sẽ phải xuất hiện trên dòng lệnh hoặc trong tệp cấu hình git, cả hai đều không được bảo mật.
Vì vậy, mọi người nên chuyển sang sử dụng trình trợ giúp thông tin xác thực để thay thế, điều này làm cho vấn đề này biến mất.

Nhưng đó không phải là lý do để không cải thiện tình hình cho những người vì bất kỳ lý do gì cuối cùng vẫn sử dụng thông tin đăng nhập được nhúng trong URL.


1

Đối với bất kỳ ai gặp vấn đề với mật khẩu có các ký tự đặc biệt, chỉ cần bỏ qua mật khẩu và nó sẽ nhắc bạn về điều đó:

git push https://YOUR_GIT_USERNAME@github.com/YOUR_GIT_USERNAME/yourGitFileName.git
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.