检查一个svn版本库url不存在
我正在编写一个脚本,它将根据用户提供的名称在存储库中添加一个新项目。 其中一部分涉及检查存储库中是否存在具有相同名称的URL。
在存储库中,我们团队的所有项目都存储在
https://developernetwork.repo.net/svn/Projects/
假设用户想调用项目“计算器”并运行脚本。 在这种情况下,我们需要确保存储库中不存在以下内容
https://developernetwork.repo.net/svn/Projects/Calculator/
有一个svn命令,我可以用它来完成? 不幸的是我看不到在svn文档( http://svnbook.red-bean.com/en/1.0/svn-book.html )中可以使用的适当命令。
你可以使用
svn ls https://developernetwork.repo.net/svn/Projects/Calculator/
它会告诉你,如果存储库(目录)存在或不存在。
更新
对于具有许多文件的目录使用:
svn ls http://server/svn/foo --depth empty
而不是检查返回string,我只是检查返回码:
都
svn ls REPOSITORY/PATH
和
svn info REPOSITORY/PATH
如果一切正常,则返回0;如果发生错误,则返回1; 你可以快速检查出来:
echo $?
所以在一个bash脚本只是做一些事情:
error=$? if [ $error -ne 0 ]; then YOUR ERROR HANDLING fi
作品像一个治疗!
要接收有关任何现有存储库的信息(例如,可能会丰富错误消息),您也可以使用
svn info https://developernetwork.repo.net/svn/Projects/Calculator/
对于一个不存在的项目,它只会返回
svn: Could not open the requested SVN filesystem
我面临着上述问题,我一路试过。 不工作的我..如果我们访问svn与不在svn的path它失败,错误和shell脚本将打破。
而不是访问未知的path,我所做的是得到父文件夹的目录列表,并检查是否匹配一个包含或不。
从父目录获取所有的项目(如果你想find一个特定的标签,那么你的父目录path应该是https://developernetwork.repo.net/svn/Projects/Calculator/tags
)
projects=$(svn ls https://developernetwork.repo.net/svn/Projects/)
然后检查你的项目文件夹是否存 请记住在项目名称后添加/
之后。
projectName="Calculator/" for i in $projects; do if [ "$i" == "$projectName/" ]; then echo Project Exist else echo Project does not exist fi done
简单。
我已经评论了一个现有的答案,但我没有足够的声誉。
我想find一个文件是否已成功导入,所以我尝试“svn info”和“svn ls”与“echo $?”。 当我使用“svn ls”时,我只能得到一个零/非零的返回码:“svn info”总是返回零。
这是红帽RHEL6颠覆1.5.5。
就像@斯科特所说, echo $?
不能用来知道URL是否正确(我在Mac OS 10.11和SVN客户端1.9.5上)。
对于潜在的未来读者,我使用这个解决方法:
content=$(svn info $SVN_TAG_URL) if [[ -z $content ]]; then echo "The SVN URL doesn't exist"; exit fi