Регулярное выражение для git-репозитория - PullRequest
15 голосов
/ 25 марта 2010

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

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

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

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

есть предложения?

Ответы [ 6 ]

37 голосов
/ 11 марта 2014

Я использую следующее регулярное выражение для удаленных онлайн-репозиториев:

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

Посмотреть на Debuggex

Regular expression visualization

10 голосов
/ 25 марта 2010

Git принимает большой диапазон выражений URL репозитория:

* ssh://user@host.xz:port/path/to/repo.git/
* ssh://user@host.xz/path/to/repo.git/
* ssh://host.xz:port/path/to/repo.git/
* ssh://host.xz/path/to/repo.git/
* ssh://user@host.xz/path/to/repo.git/
* ssh://host.xz/path/to/repo.git/
* ssh://user@host.xz/~user/path/to/repo.git/
* ssh://host.xz/~user/path/to/repo.git/
* ssh://user@host.xz/~/path/to/repo.git
* ssh://host.xz/~/path/to/repo.git
* user@host.xz:/path/to/repo.git/
* host.xz:/path/to/repo.git/
* user@host.xz:~user/path/to/repo.git/
* host.xz:~user/path/to/repo.git/
* user@host.xz: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+://)(.+@)*([\w\d\.]+)(:[\d]+){0,1}/*(.*)'
    (2) 'file://(.*)'       
    (3) '(.+@)*([\w\d\.]+):(.*)'

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

2 голосов
/ 25 марта 2010

Грубо

^[^@]+@[^:]+:[^/]+/[^.]+\.git$
1 голос
/ 03 августа 2014

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

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

Демо Debuggex

0 голосов
/ 15 мая 2019
((git@|http(s)?:\/\/)([\w\.@]+)(\/|:))([\w,\-,\_]+)\/([\w,\-,\_]+)(.git){0,1}((\/){0,1})

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

0 голосов
/ 25 марта 2010

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...