Wie kann ich den Schreibzugriff auf ein Remote-Git-Repository überprüfen ("Kann ich pushen?")

84

Ich baue einen (etwas eingeschränkten) Git-Client. Um ein Repository einzurichten, geben Sie die URL zum Remote-Repo ein. Ich möchte überprüfen, ob der Benutzer Lese- und Schreibzugriff auf dieses Repository hat. Wenn nicht, präsentiere ich einen Authentifizierungsdialog.

Ich überprüfe den Lesezugriff mit git ls-remote <url>.

Gibt es eine analoge Möglichkeit, den Schreibzugriff zu überprüfen , ohne zuerst das Repo zu klonen? (Ich weiß, ich könnte git clone <url>und dann git push --dry-run)

Yang Meyer
quelle
2
Technisch gesehen müssen Sie ein Commit nicht zuerst klonen, um es in ein Repo zu verschieben. Denken Sie jedoch daran, dass das Verschieben einer Kette von Commits und das Aktualisieren von Remote-Referenzen zwei verschiedene Vorgänge sind und Sie möglicherweise eine Berechtigung für die erstere haben, aber keine Berechtigung für die letztere. Auch bestimmte Referenzen können nicht geändert werden.
user3159253
'git push --dry-run' wird in diesem Beitrag erwähnt, um den Schreibzugriff zu überprüfen, wenn Sie geklont haben. Bei einigen meiner Fernbedienungen wird jedoch eine Kennwortabfrage geöffnet und bleibt auf unbestimmte Zeit hängen. Es scheint keine nicht interaktive Möglichkeit zu geben, zu überprüfen, ob Sie Schreibzugriff haben, selbst wenn Sie einen Klon des Repos haben. Wie kann ich den Schreibzugriff auf ein Git-Repository überprüfen, wenn ich einen Klon davon habe?
rektide
Eine sehr einfache Möglichkeit zu überprüfen ist, ob oben rechts in README.MD auf der Hauptcodepage des Repos ein Bearbeitungssymbol angezeigt wird (scrollen Sie nach unten, wenn eine lange Liste von Dateien / Ordnern der obersten Ebene vorhanden ist). . Tun Sie dies natürlich, wenn Sie bei Github angemeldet sind.
Spike

Antworten:

69

Wenn sich das Git-Repo in Github befindet, öffnen Sie eine beliebige Datei im Repo und klicken Sie auf "Bearbeiten". Github zeigt Folgendes an:

Sie bearbeiten eine Datei in einem Projekt, auf das Sie keinen Schreibzugriff haben. Wir haben einen Zweig dieses Projekts erstellt, in den Sie Ihre vorgeschlagenen Änderungen übernehmen können. Wenn Sie eine Änderung an dieser Datei senden, wird diese in einen neuen Zweig in Ihrer Verzweigung geschrieben, sodass Sie hier einen Pull Request.enter-Code senden können

Jungskk
quelle
22
Du liegst nicht falsch - Github zeigt tatsächlich dieses Verhalten. Das OP bat jedoch um etwas Analoges, git ls-remotedas das neue Tool verwenden könnte, sodass die Github-Web-Benutzeroberfläche wahrscheinlich nicht zu ihnen passen würde.
RJHunter
12
Es gibt mehr Git-Repositories als nur Github-Repositories;)
René Roth
5
In Bezug auf die GUI kann der Tooltip auch angeben, ob Sie "Bearbeiten" oder "Verzweigen und dann bearbeiten" können, wenn kein Zugriff möglich ist. Dies gilt sowohl für Github als auch für GH Enterprise.
Scott Prive
1
Das Gabeln eines Repos kopiert das gesamte Repo, oder? Das Repo könnte sehr groß sein. Das scheint eine ziemlich heftige Operation zu sein, nur um zu überprüfen, wie hoch Ihre Zugriffsebene ist ...
Kyle Delaney
2
@KyleDelaney Sie müssen nicht auf die Schaltfläche Bearbeiten klicken, sondern den Mauszeiger darüber bewegen. Es wird "Diese Datei bearbeiten" oder "Die Datei in Ihrem Zweig dieses Projekts bearbeiten" angezeigt, je nachdem, ob Sie Schreibzugriff haben oder nicht.
Joulev
3

Sie können git push git+ssh://host.org/path/to/repo some_refohne Klonen ausführen . Aber siehe meinen Kommentar oben

user3159253
quelle
2
Diese Methode würde aus einem Arbeitsverzeichnis mit einer Referenz funktionieren. Gibt es eine Möglichkeit, dies zu tun, ohne zuerst ein Dummy-Repo einzurichten und ein Commit zu erstellen?
Yang Meyer
15
Ja, wer will all diese zufälligen Dummy-Commits? Gibt es keinen saubereren Weg?
Dan Bolser
Ich habe es nicht selbst versucht, aber vielleicht könnte der --dry-runParameter verwendet werden, um den Push-Zugriff zu testen, ohne ein echtes Commit zu drücken? git-scm.com/docs/git-push#Documentation/git-push.txt---dry-run
Nathan Friend