Регулярное выражение для репозитория git
Какое будет правильное регулярное выражение для репозиториев git?
пример ссылки:
git @github.com: кто /someproject.git
так что это будет похоже на
[Пользователь] @[сервер]: [проект].git
сервер может быть URL или ip
Проект может содержать некоторые другие символы, кроме буквенно-цифровых, например '-'
Я не уверен, в чем роль '/'
любые предложения?
Ответы
Ответ 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).
Ответ 2
Я использую следующее регулярное выражение для онлайн-удаленных репозиториев:
((git|ssh|http(s)?)|([email protected][\w\.]+))(:(//)?)([\w\[email protected]\:/\-~]+)(\.git)(/)?
Просмотр в Debuggex
![Regular expression visualization]()
Ответ 3
Грубо
^[^@][email protected][^:]+:[^/]+/[^.]+\.git$
Ответ 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