正在检测来自 URL 的存储库类型
Detecting type of repository from URL
有没有办法以编程方式(可能通过向服务器发送一些请求)检测存储库的类型(例如 Git、SVN、Mercurial)?
我已经想过解析URL,但似乎不可能。例如:
- Mercurial 存储库:bitbucket。org/bos/hg-tutorial-hello
- SVN:vegastrike.svn.sourceforge.net/svnroot/vegastrike/trunk
没有办法明确地做到这一点。您可以使用一些试探法来确定它可能是哪一个:
- 如果URL中包含'svn'、'subversion'或'svnroot'或'trunk',则可能是SVN库
- 如果它在 URL 中包含 'git'、'master' 或 '.git',它可能是一个 Git 存储库
- 如果 URL 中包含 'hg' 或 'mercurial',则可能是 Mercurial 存储库
- 如果它在 URL 中包含 'cvs'、'CVSROOT' 或 'HEAD',则它可能是一个 CVS 存储库。
但是,除非您尝试克隆它,否则您不会真正知道它是哪一个。您可以执行一些 HEAD 操作(如果它是 http/s 站点),但这不一定有效 - 无论如何,如果您尝试这样做,您将获得失败的访问日志。
请注意,某些服务器(例如 GitHub 和 BitBucket)将允许您通过多种机制进行克隆(例如,将 Git 存储库签出为 Git 存储库或一个 SVN 仓库)。
如果您只需要检测这 3 种类型的回购协议:
git ls-remote $URL
returns 如果 $url 指向 Git repo ,则为真
hg id $URL
returns 如果 $url 指向 Mercurual 存储库,则提示的 id 否则错误代码 255
有没有办法以编程方式(可能通过向服务器发送一些请求)检测存储库的类型(例如 Git、SVN、Mercurial)?
我已经想过解析URL,但似乎不可能。例如:
- Mercurial 存储库:bitbucket。org/bos/hg-tutorial-hello
- SVN:vegastrike.svn.sourceforge.net/svnroot/vegastrike/trunk
没有办法明确地做到这一点。您可以使用一些试探法来确定它可能是哪一个:
- 如果URL中包含'svn'、'subversion'或'svnroot'或'trunk',则可能是SVN库
- 如果它在 URL 中包含 'git'、'master' 或 '.git',它可能是一个 Git 存储库
- 如果 URL 中包含 'hg' 或 'mercurial',则可能是 Mercurial 存储库
- 如果它在 URL 中包含 'cvs'、'CVSROOT' 或 'HEAD',则它可能是一个 CVS 存储库。
但是,除非您尝试克隆它,否则您不会真正知道它是哪一个。您可以执行一些 HEAD 操作(如果它是 http/s 站点),但这不一定有效 - 无论如何,如果您尝试这样做,您将获得失败的访问日志。
请注意,某些服务器(例如 GitHub 和 BitBucket)将允许您通过多种机制进行克隆(例如,将 Git 存储库签出为 Git 存储库或一个 SVN 仓库)。
如果您只需要检测这 3 种类型的回购协议:
git ls-remote $URL
returns 如果 $url 指向 Git repo ,则为真
hg id $URL
returns 如果 $url 指向 Mercurual 存储库,则提示的 id 否则错误代码 255