Nazwa użytkownika i hasło w poleceniu git push

110

Możliwe jest sklonowanie repozytorium git, podając nazwę użytkownika i hasło w poleceniu. Przykład:

git clone https://username:[email protected]/file.git

Czy podczas pushowania można również podać nazwę użytkownika i hasło? Na przykład uruchomienie git push origin --allspowoduje wyświetlenie prośby o hasło. Chcę to w jednym poleceniu.

(Jestem świadomy możliwości konfigurowania kluczy i innych rozwiązań, ale chcę wiedzieć, czy jest sposób, aby nadal używać nazwy użytkownika i hasła za pomocą jednego polecenia). Uruchamiam Git Bash w systemie Windows 8.1.

Jake
źródło
Czy znajdujesz rozwiązanie dla git commit?
Nam Vu

Odpowiedzi:

158

Tak, możesz to zrobić

git push https://username:[email protected]/file.git --all

w takim przypadku https://username:[email protected]/file.gitwymień plik originingit push origin --all

Aby zobaczyć więcej opcji git push, spróbujgit help push

numer 5
źródło
13
Zauważ, że spowoduje to przechowywanie nazwy użytkownika i hasła w postaci zwykłego tekstu w konfiguracji git.
szturchnij
4
zamiast zwykłego hasła możesz użyć skrótu hasła
Vasiliy Vanchuk
1
@VasiliyVanchuk Jakiego rodzaju haszyszu używasz? Czy to działa w przypadku Github?
Raphi
14
co się stanie, jeśli hasło zawiera @?
Rahul Sharma
2
Polecam załączenie całej ścieżki ' 'np .:git push 'https://username:[email protected]/file.git'
AlikElzin-kilaka
27

Użyłem poniższego formatu

git push https://username:[email protected]/file.git --all

a jeśli twoje hasło lub nazwa użytkownika zawiera @, zamień je na% 40

Hamidreza
źródło
Możesz nawet użyć WebUtility.UrlEncode (hasło), aby uzyskać to% 40
iPradeep,
dla użytkowników php użyj tego urlencode($password), zakoduje to nie tylko wszystkie znaki specjalne @.
shyammakwana.me
3

Zgodnie z dokumentacją Gita , ostatnim argumentem git pushpolecenia może być repozytorium, do którego chcesz wypchnąć:

    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>…]]

Oraz repositoryparametr może być albo URL lub nazwa zdalnej.

Możesz więc określić nazwę użytkownika i hasło w taki sam sposób, jak w przykładzie clonepolecenia.

Alexey Orlenko
źródło
2
Wydaje się to odpowiednie, ale kiedy dodam repozytorium git z nazwą użytkownika i hasłem jako argumentem, jako przykład, nadal monituje o hasło.
Jake
3

Git nie przechowuje hasła, gdy używasz takich adresów URL. Zamiast tego będzie po prostu przechowywać nazwę użytkownika, więc następnym razem będzie musiał tylko poprosić o hasło. Jak wyjaśniono w instrukcji , do przechowywania hasła należy użyć zewnętrznego pomocnika poświadczeń . W przypadku systemu Windows można użyć magazynu danych logowania systemu Windows dla Git . Ten pomocnik jest również domyślnie dołączony do usługi GitHub dla systemu Windows .

Podczas korzystania z niej Twoje hasło zostanie automatycznie zapamiętane, więc wystarczy je wprowadzić tylko raz. Dlatego podczas klonowania zostaniesz poproszony o podanie hasła, a następnie każda dalsza komunikacja z pilotem nie będzie wymagać ponownego podania hasła. Zamiast tego pomocnik poświadczeń zapewni Git uwierzytelnianie.

To oczywiście działa tylko w przypadku uwierzytelniania przez https; dla ssh access ( [email protected]/repository.git) używasz kluczy SSH i tych, które pamiętasz ssh-agent(lub programu konkursowego PuTTY, jeśli używasz plink).

szturchać
źródło
4
„Zdaję sobie sprawę z możliwości konfigurowania kluczy i innych rozwiązań, ale chcę wiedzieć, czy istnieje sposób, aby nadal używać nazwy użytkownika i hasła za pomocą jednego polecenia”.
Marvin
@Marvin Zdaję sobie sprawę z tej uwagi, jednak nie chciałem tylko podać odpowiedzi w dwóch zdaniach, więc zamieściłem informacje dla innych użytkowników, którzy mogą nie być zainteresowani tylko połączeniem przez HTTPS.
poke
4
Jednak nadal nie odpowiada na jego pytanie.
Marvin
3

Jest to możliwe, ale przed Git 2.9.3 (sierpień 2016 r.) A git pushwyświetlałby pełny adres URL używany podczas przesyłania z powrotem do sklonowanego repozytorium.
Obejmuje to twoją nazwę użytkownika i hasło!

Ale nie więcej: zobacz commit 68f3c07 (20 lipca 2016) i commit 882d49c (14 lipca 2016) autorstwa Jeffa Kinga ( peff) .
(Scalone przez Junio ​​C Hamano - gitster- w zatwierdzeniu 71076e1 , 08 sierpnia 2016)

push: anonimizacja adresu URL w wyjściu statusu

Zatwierdź 47abd85 (pobierz: usuń nazwy użytkowników z adresów URL przed ich zapisaniem, 2009-04-17, Git 1.6.4) nauczył pobierania do anonimizacji adresów URL.
Głównym celem było uniknięcie przyklejania haseł w wiadomościach typu merge-commit, ale jako efekt uboczny unikaliśmy również drukowania ich na stderr.

Strona wypychająca nie ma problemu z zatwierdzaniem przez scalanie, ale prawdopodobnie powinna unikać drukowania ich na stderr . Możemy ponownie użyć tej samej funkcji anonimizacji.

Zauważ, że aby to się pojawiło, poświadczenia musiałyby pojawić się w wierszu poleceń lub w pliku konfiguracyjnym git, z których żadne nie jest szczególnie bezpieczne.
Dlatego ludzie powinni zamiast tego korzystać z pomocników poświadczeń, co sprawia, że ​​problem zniknie.

Ale to nie jest wymówka, aby nie poprawiać sytuacji dla ludzi, którzy z jakiegokolwiek powodu używają poświadczeń osadzonych w adresie URL.

VonC
źródło
3

Dla każdego, kto ma problemy z hasłami ze specjalnymi znakami, po prostu pomiń hasło, a wyświetli się monit:

git push https://[email protected]/YOUR_GIT_USERNAME/yourGitFileName.git
Chris Adams
źródło
Wygląda na to, że Twoja odpowiedź jest jedyną w całej sieci, która jasno określa, jak podać tylko nazwę użytkownika.
shuhalo
@PreetSangha, czy zmieniłeś nazwę użytkownika YOUR_GIT_USERNAMEna swoją nazwę użytkownika, a jeśli nie używasz github.com, czy zmieniłeś ją na coś innego? Czy zmieniłeś się yourGitFileName.gitna coś innego?
TheTechRobo36414519
@ TheTechRobo36414519 Przepraszamy za mój komentarz. Było to spowodowane innym problemem związanym z pozwoleniami.
Preet Sangha
@PreetSangha Nic się nie stało: D
TheTechRobo36414519