Подтвердить что ты не робот

Регулярное выражение для репозитория git

Какое будет правильное регулярное выражение для репозиториев git?

пример ссылки: git @github.com: кто /someproject.git

так что это будет похоже на [Пользователь] @[сервер]: [проект].git

сервер может быть URL или ip Проект может содержать некоторые другие символы, кроме буквенно-цифровых, например '-' Я не уверен, в чем роль '/'

любые предложения?

4b9b3361

Ответ 1

Git принимает большой диапазон выражений 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/

Для приложения, которое я написал, для которого требуется разбор этих выражений (YonderGit), я придумал следующее (Python) регулярное выражения:

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

Для большинства URL-адресов репозитория, встречающихся "в дикой природе", я подозреваю (1).

Ответ 4

FYI Я создаю регулярное выражение для получения владельца и репо из github или bitbucket:

(?P<host>([email protected]|https://)([\w\[email protected]]+)(/|:))(?P<owner>[\w,\-,\_]+)/(?P<repo>[\w,\-,\_]+)(.git){0,1}((/){0,1})

Демоверсия Debuggex

Ответ 5

Репозитории

Git могут иметь множество форм и размеров, которые не похожи на этот пример. См. Справочную страницу git-clone для полного списка.

Некоторые из наиболее распространенных включают использование протоколов http или git вместо SSH (или, действительно, вручную указывая протокол ssh://). Имена пользователей являются необязательными, там не должно быть / или .git, могут быть указаны порты и т.д. И т.д.

В настоящий момент вы в основном используете только частные репозитории Github или те, которые выглядят как они. Это то, что вы хотите? Если так, ответ S. Mark выглядит хорошо!

Если вы хотите принять любой репозиторий git, лучшим вариантом является, вероятно, убедиться, что он действительный URI, а затем использовать библиотеку git или git, чтобы убедиться, что существует реальное репо, доступное на этом URI.

Ответ 6

(([email protected]|http(s)?:\/\/)([\w\[email protected]]+)(\/|:))([\w,\-,\_]+)\/([\w,\-,\_]+)(.git){0,1}((\/){0,1})

Это также даст вам пользователя и репо в отдельной группе.

Ответ 7

В bash вы можете сделать это без регулярных выражений:

basename https://github.com/code-co-ua/exercises-php

Выход:

exercises-php