我正在为构建脚本编写脚本以支持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名称之类的操作。但我认为可能已有更好的解决方案。
修改:
我想我现在有一个解决方法:
store
或manager
,并设置git config --global credential.interactive never
以阻止弹出对话框。和,git ls-remote https://path/to/repo
,以跳过提示的用户名和密码。这适用于我的情况,我会保留这个问题以获得更好的解决方案。