2010-03-25 8 views
13

Quelle sera l'expression régulière appropriée pour les dépôts git?Expression régulière pour le dépôt git

exemple lien: [email protected]: quelqu'un/someproject.git

il sera comme [utilisateur] @ [serveur]: [projet] .git

serveur peut être URL ou ip projet peut contenir d'autres caractères alphanumériques que comme « - » Je ne sais pas quel est le rôle de «/»

des suggestions?

+0

Je ne suis pas convaincu d'une expression régulière est la meilleure solution pour l'analyse de cette syntaxe, bien que beaucoup seraient en désaccord. Voir https: //blog.codinghorror.com/regular-expressions-now-you-have-two-problems/ –

Répondre

11

Git accepte une large gamme d'expressions d'URL du référentiel:

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

Pour une application que j'ai écrit qui exige l'analyse de ces expressions (YonderGit), je suis venu avec la expressions régulières (Python) suivantes:

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

Pour la plupart URL de pository rencontrés "dans la nature", je soupçonne (1) suffit.

+1

Cela ne fonctionne pas avec une URL comme [email protected]: group/project.git – Anonymous

2

Environ

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

Ceci ne gère pas les git uri de Gerrit. –

0

Les dépôts Git peuvent prendre plusieurs formes et tailles qui ne ressemblent en rien à cet exemple. Voir la page de manuel git-clone pour une liste complète. Parmi les plus courantes, citons l'utilisation des protocoles http ou git au lieu de SSH (ou, en fait, la spécification manuelle du protocole ssh://). Les noms d'utilisateur sont facultatifs, il ne doit pas nécessairement y avoir de / ou de .git, des ports peuvent être spécifiés, etc.

Pour le moment, vous autorisez uniquement les dépôts Github privés ou ceux qui leur ressemblent. . Est-ce que c'est ce que tu veux? Si oui, la réponse de S. Mark semble bonne! Si vous voulez accepter n'importe quel référentiel git, le mieux est probablement de vous assurer qu'il s'agit d'un URI valide, puis d'utiliser git ou une bibliothèque git pour vous assurer qu'il existe un véritable repo accessible à cet URI.

30

J'utilise l'expression régulière suivante pour les dépôts distants en ligne:

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

View on Debuggex

Regular expression visualization

+5

Je suis venu ici à la recherche d'une instruction regex donc je n'ai pas eu besoin de passer du temps dessus et j'ai trouvé le meilleur débogueur regex fabriqué. Je vous remercie. – blockloop

+0

Je suis d'accord sur Debuggex. Malheureusement, le groupe 4 dans l'expression ci-dessus ne gère pas les utilisateurs autres que "git". –

+0

tweak un peu pour l'utilisation de javascript: /((git|ssh|http(s)?)|([email protected][\w.]+))(:(\/\/)?)([\[email protected]: /\-~]+)(\.git)(\/)?/ – Alexee