如何检测给定的远程存储库是Git仓库还是SVN仓库?

时间:2016-07-19 03:30:36

标签: git svn

我正在为构建脚本编写脚本以支持SVN和Git托管项目。如果没有项目的手动设置来知道它是哪种存储库类型将是方便的。

构建脚本将在一组固定的构建服务器上运行,它将为每个构建执行干净的检查,或者在连续构建模式下执行更新。在检出存储库并执行任何预构建事件(例如从存储库下载(或export)包之前,将通过repo的URL继续执行存储库标识步骤。根据结果​​,将实例化一个具体的repo包装器对象并传递。构建脚本的其余部分将使用repo包装器的抽象接口来执行与repo相关的作业,例如, checkout,export,获取最新版本号,更新,检查远程是否有更新。

要识别回购,我会尝试一个已知回购列表,每个回复都有一个identify函数来测试回购网址。

例如,对于SVN仓库,我可以使用svn info --non-interactive --trust-server-cert https://path/to/repo并检查退出代码。它按预期工作。

如果它未能检测为SVN回购,我将尝试使用git ls-remote https://path/to/repo但似乎没有类似的选项可以在回购没有保存的凭证时禁用用户交互。

当无法访问SVN服务器时,它会尝试检测SVN repo是否为Git仓库,并弹出凭证窗口并阻止构建脚本。

在调用git命令之前,我可以执行诸如检查某些特殊关键字的repo名称之类的操作。但我认为可能已有更好的解决方案。

修改

我想我现在有一个解决方法:

  1. 在Windows上切换到用户不同的凭据帮助程序,例如storemanager,并设置git config --global credential.interactive never以阻止弹出对话框。和,
  2. 将换行通过管道传递到命令行git ls-remote https://path/to/repo,以跳过提示的用户名和密码。
  3. 这适用于我的情况,我会保留这个问题以获得更好的解决方案。

0 个答案:

没有答案