我不想检查远程存储库是否存在。我只想测试一个字符串,如果字符串是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中已经存在的正则表达式(或解析器)。如果我尝试后者,那么我不可避免地会错过一些东西。
答案 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