如何验证URL的有效格式为git repo?

时间:2014-06-01 01:36:38

标签: git

我不想检查远程存储库是否存在。我只想测试一个字符串,如果字符串是git repo的有效格式,则返回true。

我正在编写一个groovy脚本,并希望快速检查一个字符串是否代表一个有效的可能的git repo。

例如,如果输入以下字符串,则测试应返回true:

http://example.com/my-project.git
file:///absolute/path/to/my-project.git
ssh:user@example.com:my-project
my-project

以下字符串应该无法通过测试并导致返回false:

fil://example.com/my-project.git
ssh:user|example.com:my-project

我希望有一个git命令可以为我做这个快速测试,我可以从groovy脚本中调用git。我这样说是因为我想使用编译成git的任何东西来进行测试,而不是重新实现git中已经存在的正则表达式(或解析器)。如果我尝试后者,那么我不可避免地会错过一些东西。

4 个答案:

答案 0 :(得分:5)

似乎没有办法用git实现这一点。我最终使用的解决方案是

git ls-remote the-url-to-test

成功时返回零,否则返回非零。这并不能满足我原来的问题,因为我不想检查回购是否存在且是否有效......但如果回购也存在,它确实满足了URL的有效性。

这必须为我当前的脚本做。

答案 1 :(得分:3)

这接近Using a regular expression to validate an email address,因为您可以检测到某些错误,但不是全部。鉴于您无论如何都必须应对失败(错误的主机名,错误的SSH凭据),您基本上会采用一些启发式方法来捕获常见错误。我不相信你可以从Git那里借用任何验证码,尽管URL格式列表(Git URLs)应该有助于你自己实现这一点。

答案 2 :(得分:2)

尝试此正则表达式:

/^([A-Za-z0-9]+@|http(|s)\:\/\/)([A-Za-z0-9.]+(:\d+)?)(?::|\/)([\d\/\w.-]+?)(\.git)?$/i

答案 3 :(得分:0)

我改进了ЉубишаИвановић的答案,并创建了一个正则表达式:

  • 使用https@,例如https://username@bitbucket.org/otherusername/reponame.git,为对位桶有效的url工作
  • 要求后缀.git只能出现一次。

正则表达式:

/^(([A-Za-z0-9]+@|http(|s)\:\/\/)|(http(|s)\:\/\/[A-Za-z0-9]+@))([A-Za-z0-9.]+(:\d+)?)(?::|\/)([\d\/\w.-]+?)(\.git){1}$/i

在这里,您可能会看到正则表达式如何工作,并带有测试用例:https://regexr.com/59nrk