Jak mogę sprawdzić dostęp do zapisu w zdalnym repozytorium Git („czy mogę wypchnąć?”)

85

Buduję (nieco ograniczonego) klienta Git. Aby skonfigurować repozytorium, wprowadź adres URL do zdalnego repozytorium. Chcę sprawdzić, czy użytkownik ma uprawnienia do odczytu i zapisu w tym repozytorium. Jeśli nie, przedstawiam okno dialogowe uwierzytelniania.

Sprawdzam dostęp do odczytu za pomocą git ls-remote <url>.

Czy istnieje analogiczny sposób sprawdzenia dostępu do zapisu bez wcześniejszego klonowania repozytorium? (Wiem, że mógłbym git clone <url>i wtedy git push --dry-run)

Yang Meyer
źródło
2
Cóż, technicznie rzecz biorąc, aby wypchnąć zatwierdzenie do repozytorium, nie musisz go najpierw klonować. Pamiętaj jednak, że wypychanie łańcucha zatwierdzeń i aktualizacji zdalnych odwołań to dwie różne operacje i możesz mieć pozwolenie na pierwszą, ale nie masz pozwolenia na drugą. Również niektóre odniesienia mogą być niemodyfikowalne.
user3159253
„git push --dry-run” jest wspomniane w tym poście jako sposób sprawdzenia dostępu do zapisu po sklonowaniu. jednak w przypadku niektórych moich pilotów powoduje to wyświetlenie monitu o hasło i zawieszenie się na czas nieokreślony. wydaje się, że nie ma nieinteraktywnego sposobu sprawdzenia, czy masz uprawnienia do zapisu, nawet jeśli masz klon repozytorium. jak mogę sprawdzić uprawnienia do zapisu w repozytorium git, jeśli mam jego klon?
powtórz
Bardzo prostym sposobem sprawdzenia jest, czy widzisz ikonę edycji „ołówka” w prawym górnym rogu pliku README.MD na głównej stronie kodu repozytorium (przewiń w dół, jeśli istnieje długa lista plików / folderów najwyższego poziomu) . Zrób to oczywiście, gdy jesteś zalogowany do Github.
Spike

Odpowiedzi:

71

Jeśli repozytorium git jest na github, otwórz dowolny plik w repozytorium, a następnie kliknij „edytuj”, github pokaże coś takiego:

Edytujesz plik w projekcie, do którego nie masz uprawnień do zapisu. Stworzyliśmy rozwidlenie tego projektu, abyś mógł zatwierdzić proponowane zmiany. Przesłanie zmiany w tym pliku spowoduje zapisanie go w nowej gałęzi w Twoim fork, więc możesz wysłać żądanie ściągnięcia. Wprowadź kod tutaj

guyskk
źródło
22
Nie mylisz się - Github rzeczywiście pokazuje takie zachowanie. Jednak OP poprosił o coś analogicznego do git ls-remotetego, którego może użyć ich nowe narzędzie, więc interfejs sieciowy Github prawdopodobnie nie będzie im odpowiadał.
RJHunter
12
Repozytoriów git jest więcej niż tylko repozytoriów github;)
René Roth
5
Jeśli chodzi o GUI, podpowiedź może również wskazywać, czy możesz „Edycja” lub „Rozwidlaj i edytuj”, jeśli nie masz dostępu. Dotyczy to zarówno właściwego Githuba, jak i GH Enterprise.
Scott Prive,
1
Rozwidlenie repozytorium kopiuje całe repozytorium, prawda? Repozytorium może być bardzo duże. Wydaje się, że to dość ciężka operacja, aby sprawdzić, jaki jest twój poziom dostępu ...
Kyle Delaney
2
@KyleDelaney Nie musisz klikać przycisku edycji, po prostu najedź na niego. Wyświetli się „Edytuj ten plik” lub „Edytuj plik w swoim rozwidleniu tego projektu” w zależności od tego, czy masz uprawnienia do zapisu, czy nie.
joulev
3

Możesz grać git push git+ssh://host.org/path/to/repo some_refbez klonowania. Ale zobacz mój komentarz powyżej

user3159253
źródło
2
Ta metoda działałaby z katalogu roboczego z ref. Czy istnieje sposób, aby to zrobić bez konfigurowania fikcyjnego repozytorium i tworzenia zatwierdzenia?
Yang Meyer
15
Tak, kto chce tych wszystkich przypadkowych zatwierdzeń manekinów? Czy nie ma czystszego sposobu?
Dan Bolser
Nie próbowałem tego osobiście, ale być może --dry-runparametr mógłby zostać użyty do przetestowania dostępu w trybie push bez wypychania prawdziwego zatwierdzenia? git-scm.com/docs/git-push#Documentation/git-push.txt---dry-run
Nathan Friend