2010-03-25 18 views
13

Jakie będzie właściwe wyrażenie regularne dla repozytoriów git?Wyrażenie regularne dla repozytorium git

przykład Link: [email protected]: ktoś/someproject.git

tak będzie jak [user] @ [serwer]: [projekt] .git

serwer może być url lub ip Projekt może zawierać inne znaki niż alfanumeryczne, takie jak "-" Nie jestem pewien, jaka jest rola "/"

jakichkolwiek sugestii?

+0

Nie jestem przekonany do wyrażenia regularnego jest najlepszym rozwiązaniem dla analizowania składni, choć wielu nie zgodzi. Zobacz https: //blog.codinghorror.com/regular-expressions-teraz-masz-masz-dwa-problemy/ –

Odpowiedz

11

Git akceptuje szeroką gamę repozytorium wyrażeń URL:

* ssh://[email protected]:port/path/to/repo.git/ 
* ssh://[email protected]/path/to/repo.git/ 
* ssh://host.xz:port/path/to/repo.git/ 
* ssh://host.xz/path/to/repo.git/ 
* ssh://[email protected]/path/to/repo.git/ 
* ssh://host.xz/path/to/repo.git/ 
* ssh://[email protected]/~user/path/to/repo.git/ 
* ssh://host.xz/~user/path/to/repo.git/ 
* ssh://[email protected]/~/path/to/repo.git 
* ssh://host.xz/~/path/to/repo.git 
* [email protected]:/path/to/repo.git/ 
* host.xz:/path/to/repo.git/ 
* [email protected]:~user/path/to/repo.git/ 
* host.xz:~user/path/to/repo.git/ 
* [email protected]:path/to/repo.git 
* host.xz:path/to/repo.git 
* rsync://host.xz/path/to/repo.git/ 
* git://host.xz/path/to/repo.git/ 
* git://host.xz/~user/path/to/repo.git/ 
* http://host.xz/path/to/repo.git/ 
* https://host.xz/path/to/repo.git/ 
* /path/to/repo.git/ 
* path/to/repo.git/ 
* ~/path/to/repo.git 
* file:///path/to/repo.git/ 
* file://~/path/to/repo.git/ 

dla aplikacji, które napisałem, że wymaga analizowania tych wyrażeń (YonderGit), I wymyślił następujący (Python) wyrażenia regularne:

(1) '(\w+://)([email protected])*([\w\d\.]+)(:[\d]+){0,1}/*(.*)' 
    (2) 'file://(.*)'  
    (3) '([email protected])*([\w\d\.]+):(.*)' 

Dla większości re URL pozorny napotkany "na wolności", podejrzewam (1) wystarcza.

+1

To nie działa z adresem URL takim jak [email protected]: group/project.git – Anonymous

0

Repozytoria Gita mogą mieć wiele kształtów i rozmiarów, które nie przypominają tego przykładu. Zobacz pełną listę na stronie man git-clone.

Niektóre z bardziej powszechnych to używanie protokołów http lub git zamiast SSH (lub, faktycznie, ręczne określanie protokołu ssh://). Nazwy użytkowników są opcjonalne, tam nie musi być / lub .git, porty mogą być określone, itp itd

W tej chwili jesteś w zasadzie tylko pozwalając prywatnych repo GitHub, lub te, które zdarzają się wyglądać nich . Czy tego chcesz? Jeśli tak, odpowiedź S. Mark wygląda dobrze!

Jeśli chcesz zaakceptować jakiekolwiek repozytorium git, najlepiej jest upewnić się, że jest to prawidłowy identyfikator URI, a następnie użyć git lub biblioteki git, aby upewnić się, że repozytorium jest dostępne dla repozytorium rzeczywistego.

30

Używam następujące wyrażenie regularne internetowych zdalnych repozytoriów:

((git|ssh|http(s)?)|([email protected][\w\.]+))(:(//)?)([\w\[email protected]\:/\-~]+)(\.git)(/)?

View on Debuggex

Regular expression visualization

+5

Przyszedłem tutaj, szukając instrukcji regex, więc nie musiałem tracić czasu na to i znalazłem najlepszy debugger regex zrobiony. Dziękuję Ci. – blockloop

+0

Zgadzam się co do Debuggex. Niestety, grupa 4 w powyższym wyrażeniu nie radzi sobie z użytkownikami innymi niż "git". –

+0

dostosuj trochę do używania javascript: /((git|ssh|http(s)?)|([email protected][\w.]+))(:(\/\/)?)([\[email protected]: /\-~]+)(\.git)(\/)?/ – Alexee