Wie konfiguriere ich Git, um von http zu ziehen und ssh in einer “Fernbedienung” zu übertragen?

Lesezeit: 4 Minuten

Benutzer-Avatar
Tsung.W

Ziehen von http, um die Authentifizierung zu umgehen (daher muss ich kein Passwort eingeben, wenn ich ssh.keygen nicht verwende).

Pushen durch ssh mit Authentifizierung.

  • mögliches Duplikat von Diferent default remote für git pull und git push

    – Josh Lee

    24. August 2010 um 3:04 Uhr

  • Der Titel dieser Frage ist gut für jemanden, der nicht daran denkt, den Begriff “Standard” zu verwenden.

    – Joey Adams

    24. August 2010 um 3:08 Uhr


  • @jww: Richtig, ich glaube, das meinte ich vor 7 Jahren. Der Titel ist so formuliert, dass diese Frage leichter zu finden ist als das vorgeschlagene Duplikat.

    – Joey Adams

    22. November 2017 um 4:30 Uhr

Von dem git-config Manpage:

remote.<name>.url Die URL eines Remote-Repositorys. Siehe git-fetch(1) oder git-push(1).

remote.<name>.pushurl Die Push-URL eines Remote-Repositorys. Siehe git-push(1).

Versuchen Sie, Ersteres auf an zu setzen http: url und letztere zu a git+ssh: (oder nur git:) URL?

  • Danke!! Bearbeiten Sie einfach die .git/config-Datei und ändern Sie sie wie folgt: [remote “origin”] fetch = +refs/heads/*:refs/remotes/origin/* url = git.yoursite.com/your_project.git pushurl = [email protected]:/home/git/repositories/your_project.git

    – Tsung.W

    24. August 2010 um 7:47 Uhr


  • @Amber – Können Sie ein Beispiel dafür geben? Ich folge Tsungs Beispiel in den Kommentaren nicht ganz.

    – jww

    18. November 2017 um 17:50 Uhr

  • @jww Ich habe ein Beispiel mit dem genauen Befehl git config und dem resultierenden Ergebnis der git-Konfiguration hinzugefügt.

    – VonC

    4. August 2018 um 17:11 Uhr

Benutzer-Avatar
VonC

Ursprüngliche Antwort, z push durch ssh in einem ‘remote’: Dies gilt nur für eines repo, das aktuelle:

Wenn Sie eine haben git remote -v die eine https-URL für ” zurückgibtorigin“, du kannst Tippen:

git config remote.origin.pushurl [email protected]:aUser/aRepo

Oder eher:

git remote set-url --push [email protected]:aUSer/aRepo

Wie hier vermerkt:

Es ist nicht funktionell anders, als set-url intern endet nur der Aufruf von config. Aber set-url wird sich beschweren, wenn Sie den Befehlsteil falsch eingeben “git remote set-url --push“, während git config falsch eingegebene Optionen stillschweigend akzeptiert, aber die URL der Fernbedienung nicht tatsächlich festlegt.

Sehen git-Referenz (hier angepasst):

$ git remote -v
origin  https://github.com/schacon/git-reference.git (fetch)
origin  https://github.com/schacon/git-reference.git (push)

$ git remote set-url --push origin [email protected]:schacon/git-reference.git

$ git remote -v
origin  https://github.com/schacon/git-reference.git (fetch)
origin  [email protected]:schacon/git-reference.git (push)

Im Zusammenhang mit dem Kopfgeld fügt jww hinzu:

Ich möchte, dass dies für alle github.com gilt und nicht nur für meine Repos

Dann git remote ist nicht die Antwort.

Nur url.<base>.pushInsteadOf gelten würde alle Repos:

Jede URL, die mit diesem Wert beginnt, wird nicht gepusht; Stattdessen wird es neu geschrieben, sodass es mit beginnt, und die resultierende URL wird an gepusht. ich

So:

 git config --global url."[email protected]:".pushInsteadOf https://github.com/
 # or
 git config --global url."ssh://[email protected]/".pushInsteadOf https://github.com/

Ich habe diese Option 2014 in „Git: How to get the public, read-only git:// URL“ erwähnt.

Das --global Option wird das angewandt auf machen alle Repos, nicht nur das aktuelle.


Aus Jridgewells Kommentar und Kern:

Um immer von HTTPS zu pullen und immer über SSH zu pushen, funktioniert Folgendes:

 git config --global url."https://github.com/".insteadOf [email protected]:
 git config --global url."[email protected]:".pushInsteadOf https://github.com/
 git config --global url."[email protected]:".pushInsteadOf [email protected]:

Dies nutzt insteadOf um SSH für Pulls in HTTPS umzuschreiben. Es verwendet auch pushInsteadOf (der erste), um HTTPS für Pushs in SSH umzuschreiben. Und es verwendet a pushInsteadOf (die zweite), um sicherzustellen, dass SSH für Pushs verwendet wird, wenn die ursprüngliche Remote-URL SSH war.

Der Zweite pushInsteadOf ist wichtig.
Git verwendet die erste geschriebene Push-URL und sie gilt pushInsteadOf Vor insteadOf.
Durch Umschreiben eines Originals [email protected]: zu [email protected]:wir verhindern die insteadOf vom Umschreiben von SSH zu HTTPS für Pushs.

  • Danke @VonC. In meinem Fall möchte ich, dass alle GitHub-Pushs mit SSH und alle Pulls mit HTTPS erfolgen. Alles andere sollte HTTPS für Pull und Push verwenden. Hier ist meine gitconfig. Wenn ich versuche hinzuzufügen [pull https://github.com] es verwendet immer noch SSH für den Pull. Anderes Twiddeln scheint Git einfach kaputt zu machen. ich habe das url/InsteadOf von einem anderen Stack Overflow Q&A vor einiger Zeit, konnten es aber nicht auf HTTPS-Pull und SSH-Push erweitern.

    – jww

    4. August 2018 um 21:31 Uhr


  • @jww Entfernen Sie zuerst das Statt: das wird klarer

    – VonC

    4. August 2018 um 21:39 Uhr

  • @jww Zweitens versuchen Sie, das Repo als https zu klonen, und verwenden Sie es dann git remote set-url --push [email protected]:aUSer/aRepo innerhalb des lokalen Klons.

    – VonC

    4. August 2018 um 21:39 Uhr


  • Danke @VonC. Können Sie mir eine funktionierende Gitconfig zeigen, die dies bewerkstelligt? Es ist schmerzhaft für mich, mit der Git-Befehlszeile zu arbeiten. Es ist viel einfacher, eine Gitconfig zu kopieren/einzufügen.

    – jww

    4. August 2018 um 21:56 Uhr

  • @jww Es ist weniger riskant, den Befehl einzugeben. Einfach kopieren und einfügen git remote set-url --push origin [email protected]:yourUser/yourRepo.git und du bist fertig.

    – VonC

    4. August 2018 um 22:48 Uhr

1204680cookie-checkWie konfiguriere ich Git, um von http zu ziehen und ssh in einer “Fernbedienung” zu übertragen?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy