2010-03-25 15 views
13

¿Cuál será la expresión regular adecuada para los repositorios de git?Expresión regular para el repositorio de git

ejemplo enlace: [email protected]: alguien/someproject.git

por lo que será como [usuario] @ [servidor]: [proyecto] .git

servidor puede ser url o ip El proyecto puede contener algunos caracteres que no sean alfanuméricos como '-' No estoy seguro de cuál es el rol de '/'

¿Alguna sugerencia?

+0

No estoy convencido de una expresión regular es la mejor solución para analizar esta sintaxis, aunque muchos no estarían de acuerdo. Ver https: //blog.codinghorror.com/regular-expressions-now-you-have-two-problems/ –

Respuesta

11

Git acepta una gran variedad de expresiones de URL del repositorio:

* 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/ 

Para una aplicación que escribí que requiere el análisis de estas expresiones (YonderGit), se me ocurrió la siguientes expresiones regulares (Python):

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

Para la mayoría de re las URL de los pository encontradas "en la naturaleza", sospecho que (1) son suficientes.

+1

Esto no funciona con una url como [email protected]: group/project.git – Anonymous

2

Aproximadamente

^[^@][email protected][^:]+:[^/]+/[^.]+\.git$ 
+0

Esto no funciona con los git uri's de Gerrit. –

0

Los repositorios de Git pueden venir en muchas formas y tamaños que no se parecen en nada a ese ejemplo. Consulte la página del manual git-clone para obtener una lista completa.

Algunos de los más comunes incluyen utilizar los protocolos http o git en lugar de SSH (o, de hecho, especificar manualmente el protocolo ssh://). Los nombres de usuario son opcionales, no tiene que ser un / o un .git, se pueden especificar puertos, etc. etc.

Por el momento básicamente solo está permitiendo repositorios privados de Github, o los que se parecen a ellos . ¿Es eso lo que quieres? Si es así, ¡la respuesta de S. Mark se ve bien!

Si desea aceptar cualquier repositorio de git, la mejor opción es asegurarse de que sea un URI válido, y luego use git o una biblioteca de git para asegurarse de que haya un repo real accesible en ese URI.

30

estoy usando la siguiente expresión regular para los repositorios remotos en línea:

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

View on Debuggex

Regular expression visualization

+5

Vine aquí en busca de una declaración de expresiones regulares, así que no tuve que perder tiempo en ello y encontré el mejor depurador de expresiones regulares alguna vez hecho. Gracias. – blockloop

+0

Estoy de acuerdo acerca de Debuggex. Desafortunadamente, el grupo 4 en la expresión anterior no soporta usuarios que no sean "git". –

+0

modificar un poco para el uso de JavaScript: /((git|ssh|http(s)?)|([email protected][\w.]+))(:(\/\/)?)([\[email protected]: /\-~]+)(\.git)(\/)?/ – Alexee